如何在 Keras 中屏蔽损失函数 (mae)?

How to mask a loss function (mae) in Keras?

我正在尝试为 Keras LSTM 实现自定义损失函数,它将表示 mask_MAE。

def mask_MAE (y_true, y_pred, mask):# mask = 0 or 1
    mae = K.abs(y_pred - y_true) * mask
    return K.sum(mae)/K.sum(mask)    

自定义 keras 损失函数只能有两个参数 - y_true & y_pred
因此,您不能像在代码中那样使用该 mask 参数。

我找到了问题的答案。 我正在使用 LSTM,80 是 num_steps

def GBVPP_loss(y_true, y_pred, cols = 80):
   u_out = y_true[:, cols: ]
   y = y_true[:, :cols ]
   w = 1 - u_out
   mae = w * tf.abs(y - y_pred)
   return tf.reduce_sum(mae, axis=-1) / tf.reduce_sum(w, axis=-1)
...
history = model.fit(X_train, np.append(y_train, u_out_train, axis =1), 
                 validation_data=(X_valid, np.append(y_valid, u_out_valid, axis =1)), 
                 epochs=EPOCH, batch_size=BATCH_SIZE,
                 verbose=0,
                 callbacks=[lr])