Keras:平均不同的损失函数

时间:2018-05-20 17:28:16

标签: python tensorflow keras

我正在使用带有TensorFlow后端的Keras,并想要定义这样的自定义丢失函数:

  • 它计算y_true和y_pred的前两个条目之间的欧氏距离
  • 它计算其余条目之间的绝对误差

然后需要平均值。

我这样做:

def custom_objective(y_true, y_pred):
    y_true = backend.get_value(y_true)
    y_pred = backend.get_value(y_pred)

    a = np.sqrt(np.mean(np.square(y_pred[:2] - y_true[:2]), axis=-1))
    b = np.sum(np.abs(y_true[2:] - y_pred[2:]))
    return (a + b) / 5

编译模型时我得到InvalidArgumentError

model.compile(loss=custom_objective, optimizer='adam')

1 个答案:

答案 0 :(得分:1)

你在Keras张量上使用NumPy,遗憾的是这是一个致命的组合。您正在寻找的是:

def custom_objective(y_true, y_pred):
  a = K.sqrt(K.mean(K.square(y_pred[:2] - y_true[:2]), axis=-1))
  b = K.sum(K.abs(y_true[2:] - y_pred[2:]))
  return (a + b) / 5 # these operators work on tensors