
DQN中误差计算是由上式的均方误差来定义的,我的神经网络的输出是Qeval,是Action个q值,但是我在用tensenflow代码实现max(Q(snext)) 时遇到了问题,就是我有两个版本
版本一用one-hot编码动作,然后用动作和Qeval向量相乘的到max(Q(snext))
版本二没有使用动作,直接用tf.reduce mean(Qeval,axis=1)来直接得到max(Q(snext))。
那么问题来了:(每训练100步,然后再测试十次取平均,使用的gym.cartPole-v0环境)我用版本一,大约第1100回合就可以达到200分。
我用版本二,效果却相差有点大。我想问:这两个版本的计算效果都是一样的,可为什么效果却差很多呢(运行了多次,结果都一样)?

tensorflow 实现 DQN2013版 计算max(Q(snext))代码问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
你知我知皆知 2024-08-07 19:11关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
在TensorFlow中,为了计算一个动作的最大Q值,可以使用以下方法:
# Q_eval 表示当前网络的输出 Q_eval = tf.reduce_max(self.Q_value, axis=1) # 使用最大Q值作为目标 target_Q = y_j + gamma * max(Q_next_values)其中
gamma为折扣因子,表示对未来的奖励进行折扣。在这个例子中,您已经成功地实现了版本一的代码。现在,请尝试将代码中的
one_hot_action更改为tf.argmax(Q_eval, axis=1)以获得动作的最大Q值,并再次训练模型。这应该会提供更好的结果。解决 无用评论 打赏 举报