【发布时间】:2022-01-08 03:45:03
【问题描述】:
我正在尝试构建一个带有自定义损失函数的 simpleRNN 网络。我根据 25 个不同的特征预测 bmi。我的数据集不平衡并且有异常值,并且希望更好地预测异常值。相反,更好地预测异常值更为重要。 对于我的自定义损失函数,我添加了条件,如果损失大于 2 个单位,那么我想更多地惩罚这些观察结果。
import keras.backend as K
def custom_loss(y_true, y_pred):
loss = K.abs(y_pred - y_true)
wt = loss * 5
loss_mae = K.switch((loss > 2),wt,loss)
return loss_mae
model = Sequential()
model.add(SimpleRNN(units=64, input_shape=(25, 1), activation="relu"))
model.add(Dense(32, activation="linear"))
model.add(Dropout(0.2))
model.add(Dense(1, activation="linear"))
model.compile(loss=custom_loss, optimizer='adam')
model.add(Dropout(0.1))
model.summary()
model.fit(train_x, train_y)
运行此代码后的示例预测
preds=[[16.015867], [16.022823], [15.986835], [16.69895 ], [17.537468]]
actual=[[18.68], [24.35], [18.07], [15.2 ], [13.78]]
如您所见,对 2nd 和 5th obs 的预测仍然遥遥无期。我在代码中做错了吗?
【问题讨论】:
标签: neural-network loss-function