machine-learning - 神经图灵机损失变为 NaN

标签 machine-learning tensorflow deep-learning

更新:这个问题已经过时,并且被要求提供 1.0 版之前的tensorflow。不要引用答案或建议新答案。

我使用 tf.nn.sigmoid_cross_entropy_with_logits 函数来计算损失,它会变为 NaN。

我已经在使用梯度裁剪,这是执行张量除法的一个地方,我添加了一个 epsilon 来防止除以零,并且所有 softmax 函数的参数也添加了一个 epsilon。

然而,我在训练中得到了 NaN。

是否有任何我错过的 TensorFlow 执行此操作的已知问题? 这非常令人沮丧,因为损失在训练过程中随机变为 NaN 并破坏了一切。

此外,我如何才能检测训练步骤是否会导致 NaN,并且可能完全跳过该示例?有什么建议吗?

编辑:网络是神经图灵机。

编辑2:这是渐变裁剪的代码:

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 一段时间了,到目前为止,损失还没有发散。我将进行更多测试并报告。

最佳答案

使用 1e-4 作为学习率。对于 Adam 优化器来说,这个似乎总是对我有用。即使你进行渐变剪辑,它仍然会发散。另外一个偷偷摸摸的方法是取平方根,因为尽管它对于所有正输入都是稳定的,但当值接近零时,它的梯度会发散。最后我会检查并确保模型的所有输入都是合理的。

关于machine-learning - 神经图灵机损失变为 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40809568/

相关文章:

apache-spark - 如何使用Spark Kmeans模型获取Kmeans集群数据

python - 值错误 : multiclass format is not supported , xgboost

tensorflow - 获取图像分割中各个测试图像的准确性

tensorflow - 如何修复错误 "object has no attribute ' _output_tensor_cache'"?

python - 是否可以在单个 python 脚本中在多个 GPU 上并行训练多个 Keras 模型?

python - 使用 LabelEncorder 我试图将数据集从字符串更改为数字

tensorflow - 加载VGG16时资源耗尽的OOM

python - 使用 tensorflow.contrib.signal 重建信号会导致放大或调制(帧、overlap_and_add、stft 等)

python - TensorFlow Keras CuDNNGRU 到 GRU 转换

neural-network - CNN前馈或反向传播模型