我正在通过使用带有Tensorflow后端的Keras进行一个项目。由于业务原因,我需要高度重视某些错误,因此我实现了一个自定义的损失函数。例如:
error = np.abs(y_true - predict)
if error > low_limit:
error = error * 10
我发现此自定义损失函数确实改变了训练期间显示的错误值。我想知道的是,这个新的损失函数是否真的可以改变训练过程中反向传播的行为?因为我发现模型的权重没有太大差异。
答案 0 :(得分:0)
简短的回答:是的,这个损失函数确实改变了BP的行为,但是令我惊讶的是,这个损失函数起作用了……
无论如何,我觉得以下损失函数更有意义
def my_mae( y_true, y_pred, low_bound=1e-3, coef=10. ) :
raw_mae = keras.losses.mae( y_true, y_pred )
mask = K.cast( raw_mae <= low_bound, dtype='float32' )
#new_mae = mask * raw_mae * coef + (1-mask) * raw_mae
new_mae = (1 + mask * (coef-1)) *raw_mae
return new_mae
当样本损失太低时,会产生额外的损失。