tensorflow:为什么collect_nd是可区分的?

标签 tensorflow gradient reinforcement-learning

我正在研究一个tensorflow网络,该网络为CartPole open-ai env实现了强化学习。

网络为策略梯度代理实现likelihood ratio approach

事实是,策略丢失是使用gather_nd op定义的!在这里,看看:

    ....
    self.y = tf.nn.softmax(tf.matmul(self.W3,self.h2) + self.b3,dim=0)
    self.curr_reward = tf.placeholder(shape=[None],dtype=tf.float32)
    self.actions_array = tf.placeholder(shape=[None,2],dtype=tf.int32)
    self.pai_array = tf.gather_nd(self.y,self.actions_array)
    self.L = -tf.reduce_mean(tf.log(self.pai_array)*self.curr_reward)

然后,他们针对网络的所有参数采用这种损耗的导数:
    self.gradients = tf.gradients(self.L,tf.trainable_variables())

怎么会这样??我认为神经网络的整个问题总是与cross-entropy这样的可区分操作一起工作,并且从未做过像根据随机选择且显然不可区分的self.y选择self.actions_array索引这样的奇怪事情。

我在这里想念什么?谢谢!

最佳答案

如果参数已收集,则渐变为1,否则为0。收集运算符的一个用例是像稀疏的一热点矩阵乘法一样工作。第二个参数是稀疏矩阵的密集表示,您只需选择正确的行即可将其与第一个参数“相乘”。

关于tensorflow:为什么collect_nd是可区分的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45701722/

相关文章:

python - 准备张量分配时出现意外失败 : tensorflow/lite/kernels/reshape. cc :85 num_input_elements ! = num_output_elements (1200 != 0)

javascript - 为什么我的神经网络训练方法没有被调用? (ML5.JS)

java - 使用 alpha 透明度从 0 到 1 绘制透明渐变

numpy - 使用批量乘法在 tensorflow 的 tensordot 中遇到障碍

python - 如何将具有自定义 keras 层(.h5)的 keras 模型卡住为 tensorflow 图(.pb)?

r - 使用渐变对散点图进行颜色编码

java - 移动具有渐变填充的矩形

artificial-intelligence - Delphi/Pascal 中的 TD(λ)(时间差分学习)

reinforcement-learning - 简单来说,强化学习中的策略梯度算法中的目标网络是什么?举个例子?

python - 函数逼近 : How is tile coding different from highly discretized state space?