我正在使用带有TensorFlow后端的Keras,并想要定义这样的自定义丢失函数:
然后需要平均值。
我这样做:
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')
答案 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