定制的损失函数会影响Keras中的反向传播吗?

时间:2018-10-08 02:46:13

标签: keras backpropagation

我正在通过使用带有Tensorflow后端的Keras进行一个项目。由于业务原因,我需要高度重视某些错误,因此我实现了一个自定义的损失函数。例如:

error = np.abs(y_true - predict)
if error > low_limit:
    error = error * 10

我发现此自定义损失函数确实改变了训练期间显示的错误值。我想知道的是,这个新的损失函数是否真的可以改变训练过程中反向传播的行为?因为我发现模型的权重没有太大差异。

1 个答案:

答案 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

当样本损失太低时,会产生额外的损失。