我有一个模型,我想建立一个自定义损失函数,我的状态是我的X值,然后我的动作是7个单项热门分类值,它们是我的Y值,在预测。
但是我不确定如何将奖励传递给损失函数。我也不确定实际的功能应该是什么,但是稍后我可以尝试一下。
x = input_data[:, :-2] # States
y = input_data[:, -2] # Actions
r = input_data[:, -1] # Rewards
def custom_loss(y_pred, y_true):
loss = K.square(y_pred - y_true) * r
return loss
model.compile(loss=custom_loss, optimizer='adam', metrics=['accuracy'])
model.fit(x, y)
答案 0 :(得分:1)
您可以编写一个返回另一个函数的函数。您将奖励作为参数传递给顶部函数:
def penalized_loss(reward):
def custom_loss(y_true, y_pred):
return K.mean(K.square(y_pred - y_true) - K.square(y_true - reward), axis=-1)
return custom_loss
.
.
.
model.compile(loss=[penalized_loss(reward=r)], optimizer='adam', metrics=['accuracy'])
我还为要点提供了一个非常愚蠢的工作示例: https://gist.github.com/kolygri/c222adba4dff710c6c53bf83c0ed5d21