在张量流更新后,我的变量变为NaN

时间:2018-03-28 21:13:04

标签: tensorflow machine-learning deep-learning reinforcement-learning loss-function

所以我试图在张量流中实现DQN算法,我已经定义了下面给出的损失函数,但每当我使用ADAM优化器执行权重更新时,在2-3次更新后,我的所有变量都变为nan。知道可能是什么问题。我的动作可以取(0,10)之间的整数值。知道我可能会发生什么吗?

def Q_Values_of_Given_State_Action(self, actions_, y_targets):


        self.dense_output=self.dense_output #Output of the online network which given the Q values of all the actions in the current state

        actions_=tf.reshape(tf.cast(actions_, tf.int32), shape=(Mini_batch,1)) #Actions which was taken by the online network
        z=tf.reshape(tf.range(tf.shape(self.dense_output)[0]), shape=(Mini_batch,1) )

        index_=tf.concat((z,actions_), axis=-1)

        self.Q_Values_Select_Actions=tf.gather_nd(self.dense_output, index_)

        self.loss_=tf.divide((tf.reduce_sum (tf.square(self.Q_Values_Select_Actions-y_targets))), 2)


        return self.loss_

1 个答案:

答案 0 :(得分:0)

您的输入通常大到10的事实表明您的渐变正在爆炸。你可以通过将学习率降低到非常小的水平来检查这一点(尝试将你当前的学习率除以100)。如果获得NaN需要更长的时间,或者根本没有发生,那就是你的学习率。如果这是你的学习率,那么考虑使用单热矢量来表示行动。

一般情况下,您可以使用tf.Print使用tfdbg追踪小错误。