为Keras中的不同功能设置不同的损失函数

时间:2020-08-28 07:44:50

标签: python tensorflow keras

我有一个具有5个输入功能的模型,输入看起来像这样:

- 500.0  --  499.752  --  499.813  --  0.061  --  -0.016 -
- 499.91  --  499.763  --  499.828  --  0.064  --  0.005 -
- 499.83  --  499.768  --  499.828  --  0.06  --  0.021 -
- 499.91  --  499.779  --  499.841  --  0.062  --  0.035 -
- 499.95  --  499.792  --  499.858  --  0.066  --  0.045 -
- 500.0  --  499.807  --  499.879  --  0.073  --  0.054 -
- 500.0  --  499.821  --  499.898  --  0.077  --  0.06 -
- 500.0  --  499.834  --  499.914  --  0.079  --  0.065 -
- 500.0  --  499.847  --  499.927  --  0.08  --  0.069 -
- 499.96  --  499.855  --  499.932  --  0.077  --  0.071 -
- 500.0  --  499.866  --  499.943  --  0.077  --  0.072 -
- 500.0  --  499.876  --  499.951  --  0.076  --  0.074 -
- 500.0  --  499.885  --  499.959  --  0.074  --  0.075 -
- 500.0  --  499.894  --  499.965  --  0.072  --  0.076 -
- 499.99  --  499.901  --  499.969  --  0.068  --  0.075 -

如您所见,特征1,2和3移动500,而特征4和5移动零。 我只有一个MSE损失函数,这使模型可以预测所有功能的相似数字。

一个例子:

Should have predicted:
- 500.0  --  499.866  --  499.943  --  0.077  --  0.072 -

But predicted:
- 34.875  --  22.658  --  42.792  --  -4.824  --  -24.389 -

您可以看到它如何尝试产生所有相似的数字。 您还可以在训练中看到这一点,当模型变得更准确但损失更大时。

我正在寻找的是一种对功能1、2和3分别进行MSE损失,然后对4和5进行另一种MSE损失的方法,因此该模型实际上可以在特定功能范围内输出。

我还考虑过将特征4和5缩放到与1、2和3相同的范围,但是我不知道这样是否也可以。

如果还有其他可能的解决方案,请分享。 谢谢!

2 个答案:

答案 0 :(得分:1)

不管以上问题如何,您确定模型实现正确吗?
但是,对于您的情况,我认为最好使用Min-Max scaler来将所有要素的值缩放到0和1之间(默认情况下),然后应用模型并比较结果。

答案 1 :(得分:0)

我要在@Meysam的答案中加上scikit learning中的MinMaxScaller具有inverse_transform函数,该函数可以重现初始值。

例如,您可能有:

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
scaler.fit(Y)

(... training here ...)

Y_pred = model.predict(X_test)

您的预测模型将明显缩放,因此,如果要在初始缩放时获取值,则应使用相同的缩放器:

Y_pred_original_scaling = scaler.inverse_transform(Y_pred)