约束 Keras 回归输出

问题描述 投票:0回答:2

我成功地使用 Keras 训练了一个神经网络。然而,对一些样本的预测却大相径庭。现在,我想将预测限制在某个区间(例如 5 到 10),这是针对我的特定问题进行预测的唯一区间。更一般地说,我想强制输出具有特定的分布(例如标准正态分布)。 我尝试了 Keras lambda 层 keras.layers.Lambda(函数,output_shape =无,掩码=无,参数=无) 以 Keras 概率分布为函数 (https://www.tensorflow.org/probability)。 然而,事实并非如此。有什么方法可以将 Keras 回归中的预测限制在某个区间和/或分布吗? 非常感谢!

keras distribution keras-layer
2个回答
0
投票

这就是为什么标准化数据标签(例如

[0, 1]
[-1, 1]
范围)是一种很好的做法的原因之一。然后,通过在输出层放置
sigmoid
tanh
激活函数,可以轻松将神经网络输出限制在这些范围之一。

这是卷积目标检测器通常所做的事情,它应该可以很好地解决您的问题。神经网络无法输出概率分布,除非你的模型输出概率分布的参数,但仅仅归一化就可以很好地工作,而且更容易。


0
投票

在训练之前使用 MinMaxScaler() 缩放训练和测试数据,并使用缩放后的数据来训练模型。然后,您的模型预测将在定义的范围内,并且您应用逆变换。

在缩放数据之前:

minmax_scaler = MinMaxScaler(feature_range=(0,1))
minmax_scaler.fit([[-130],[-20]]) # this is a custom scale with min=-130, max=-20. 


#scale your y_train, y_test
y_train_minmax = minmax_scaler.transform(y_train.reshape(-1,1))
y_test_minmax = minmax_scaler.transform(y_test.reshape(-1,1))

#Train your model with the scaled labels...
history = model.fit(X_train_std, y_train_minmax, epochs=batch_size, validation_split=0.85, batch_size=batch_size, callbacks=[tensorboard_cb])

#Make predictions and inverse transform your data
y_pred = model.predict(X_test_std)

y_pred_values = minmax_scaler.inverse_transform(y_pred)

© www.soinside.com 2019 - 2024. All rights reserved.