我使用tf.scatter_update
更新代码中的不可训练变量AL
和AO
。但是,当我运行优化程序tf.train.AdamOptimizer(config.actor_lr0,0.9,0.999,1e-8).minimize(actor_loss)
时,我收到错误LookupError: No gradient defined for operation 'actor/encoder/beer_game_flow_8/next_scat_j_2' (op type: ScatterUpdate)
。
我发现tf.scatter_update
没有渐变,这就是我收到错误的原因。
代码中的更新是:
self.players[k-1].AS = tf.scatter_update(self.players[k-1].AS,
self.curTime + leadTimeIn,
tf.add(self.players[k-1].AS[self.curTime + leadTimeIn], possible_shipment), name='next_scat_j'
)
self.players[k+1].AO = tf.scatter_update(self.players[k+1].AO,
self.curTime + leadTime, tf.add(self.players[k+1].AO[self.curTime + leadTime],
self.players[k].actionValue(self.curTime, self.playType))
, name='handle_scat_j')
由于AS
和AO
都不可训练,我不需要它们的渐变,在op
中,只存在这两个变量。所以,我想知道为什么TensorFlow
想要获得渐变,是否有任何方法可以阻止AdamOptimizer考虑scatter_update
?
我的意思是,我可以在compute_gradient中排除给定的op吗?
我感谢任何评论。
谢谢, 阿夫欣