请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

q估计值那,为什么做什么切片,没听明白,老师能讲明白原理吗

    # 在 Q_eval_net 中,计算状态 s_j 的估计 Q 值
    with tf.variable_scope('Q_eval'):
        a_indices = tf.stack([tf.range(tf.shape(self.a)[0], dtype=tf.int32), self.a], axis=1)
        # tf.gather_nd 用 indices 定义的形状来对 params 进行切片
        self.q_eval_by_a = tf.gather_nd(params=self.q_eval, indices=a_indices)

这里为什么要做什么切片,没听懂,老师让我们去官网插。但是为什么需要做这些处理,官网也没有,只有函数功能。能否解释一下

正在回答 回答被采纳积分+3

1回答

Oscar 2019-12-17 21:06:37

根据 Deep Q Network 的推导公式,和 tf.gather_nd 的方法定义。

切片是 slicing 的翻译,请看上面 tf.gather_nd 的文档。

1 回复 有任何疑惑可以回复我~
  • 提问者 Jerry_Lnj #1
    看了莫烦老师讲解,知道要用为什么这么做,但是没看懂这两句代码,是怎么操作的。不知道能否附上具体含数字的解释。比如DQN走迷宫游戏。在本例子中Q_eval网络输出的是[None, 4]的矩阵,4个参数对应所有动作的q值,之后运行这两步,矩阵的shape如何变化,怎么取值的,因为最后要变成[None, ]的shape
    回复 有任何疑惑可以回复我~ 2019-12-18 04:41:06
  • 提问者 Jerry_Lnj #2
    我搞懂了,我搞错self.a,我以为self.a是[0,1,2,3]是四个动作对应的数字,其实应该是每个样本所选取的动作,维度应该是[None, ]。获得每个样本选取动作的a_indices, 再去eval网络算出来的q_eval做一个gather_nd,获得Q_eval网络对应该样本选取动作的Q值
    回复 有任何疑惑可以回复我~ 2019-12-18 04:55:31
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号