我正在使用tf.nn.sigmoid_cross_entropy_with_logits函数进行损失,它将进入NaN.
我已经在使用渐变剪辑,一个执行张量除法的地方,我添加了一个epsilon来防止除零,并且所有softmax函数的参数也添加了一个epsilon.
然而,我正在通过训练获得NaN的中途.
是否有任何已知的问题,其中tensorflow这样做,我错过了?
这是非常令人沮丧的,因为在训练期间损失随机地转移到NaN并破坏了一切.
另外,我怎么能去检测火车步骤是否会导致NaN并且可能完全跳过这个例子?有什么建议?
编辑:网络是神经图灵机.
编辑2:我上传了一些代码here.
它没有被评论,并且对那些已经阅读过Graves等人的NTM论文的人来说最有意义.可在此处获取:https://arxiv.org/abs/1410.5401
我不确定我的所有代码是否完全遵循了论文作者的意图.我只是这样做练习,我没有导师来纠正我.
编辑3:这是渐变剪辑的代码:
optimizer = tf.train.AdamOptimizer(self.lr)
gvs = optimizer.compute_gradients(loss)
capped_gvs =\
[(tf.clip_by_value(grad, -1.0, 1.0), var) if grad != None else (grad, var) for grad, var in gvs]
train_step = optimizer.apply_gradients(capped_gvs)
我不得不添加if grad!= None条件,因为没有它我会收到错误.问题可能在这里吗?
潜在的解决方案:我现在正在使用tf.contrib.losses.sigmoid_cross_entropy一段时间,到目前为止,损失尚未发生.将测试更多并报告回来.
最佳答案 我知道这已经有一段时间了,但是我想在剪辑之外添加另一个帮助我的解决方案.我发现,如果我增加批量大小,那么损失往往不会接近0,并且最终(到目前为止)没有进入NaN.希望这有助于找到这个的人!