【发布时间】:2021-02-28 16:52:57
【问题描述】:
在处理强化学习问题时出现以下问题。在我的代码中,在计算损失时,我最终遇到了以下问题:我的神经网络输出 4 个 q 值(给定一个状态作为输入,它输出给定状态下可以采取的每个动作的 q 值 --> 4 种可能的行动)。现在对于 DQN 算法,我想计算 y_true 之间的损失,它基本上表示折扣奖励,因此只是一个标量,我的代理实际采取的行动的 q 值(所以只是四个 q 值之一)。那里我不能使用 keras 中可用的自定义 MSE。我想我需要以下结构:
import keras.backend as kb
def custom_loss_function(batch_action_taken):
def loss(y_true, y_pred):
q_value = ? #need to extract the q_values from y_pred according to the action taken in batch_action_taken
return kb.mean(kb.square(q_value - y_true), axis=-1)
return loss
但由于函数中的值是 keras 对象,我不知道如何对我放置注释的行进行编码。
我希望,我解释得很好。我也google了很多,但我找不到答案!
编辑:为了澄清目的:
batch_action_taken: 长度为 36 的向量,每个条目为 0,1,2 或 3
y_true:长度为36的向量
y_pred: 大小为 (36, 4)(对于每个数据点,总共 36, 4 个可能的操作)
q_value: 应该是一个长度为 36 的向量,每个条目对应于 y_pred 中的一行中的一个值,具体取决于 batch_action_taken 的对应值em>
【问题讨论】:
标签: keras deep-learning reinforcement-learning q-learning