使用Python中的Keras进行奖励的自定义丢失函数

问题描述 投票:1回答:1

我有一个模型,我想建立一个自定义的损失函数,我的状态是我的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)
python reinforcement-learning loss-function
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.