如何在keras回归中编写一个自定义损失函数,其中MAE仅计算在一定阈值以上的y_pred。就像。y_true = 10、14、23、30、5、4、
y_pred =8、12、27、38、10、8
如何编写一个自定义损失函数,其中仅计算出y_pred值大于20的MAE (平均绝对误差),即y_pred > 20,即23,30,即6 (27-23) + (38-30)/2。
出现了这个问题,因为我需要的模型只能正确地预测最高范围的预测,所以我只能使用那些数据点,只有返回最高预测值的数据,因为其他较低的预测数据对我没有用处。就像-
def custom_loss(y_pred, y_true):
for y_pred > 20:
result =MAE(y_pred , y_true)
return result
发布于 2020-06-22 10:26:53
试着这样做
def custom_loss(y_true, y_pred):
y_pred = y_pred[y_pred>20]
y_true = y_true[y_pred>20]
return tf.reduce_mean(tf.abs(y_true-y_pred))
n_sample = 1000
X = np.random.uniform(0,5, (n_sample,10))
y = np.random.randint(0,50, n_sample)
inp = Input((10,))
x = Dense(32, activation='relu')(inp)
out = Dense(1)(x)
model = Model(inp, out)
model.compile('adam',loss=custom_loss)
model.fit(X,y, epochs=10)
这一损失可能会导致in,因为所有的预测批次都在20以下,所以请注意预测的大小。
发布于 2020-06-22 09:30:43
对于Keras丢失函数,据我所知,您应该坚持使用Keras后端函数。看看这里,我已经链接了Tensorflow Keras后端文档。
有一个名为map_fn
的函数可能对您有用,它允许您在所有y_pred y_true对上映射一个函数,但是可能有几种不同的方法来处理这个问题,文档应该会有帮助!
https://stackoverflow.com/questions/62519601
复制相似问题