来自Tensorflow中的sparse_softmax_cross_entropy_with_logits的NaN

Dav*_*ida 6 python tensorflow

当我尝试在tensorflow中使用sparse_softmax_cross_entropy_with_logits丢失函数时,我得到NaN.我有一个简单的网络,如:

layer = tf.nn.relu(tf.matmul(inputs, W1) + b1)
layer = tf.nn.relu(tf.matmul(layer, W2) + b2)
logits = tf.matmul(inputs, W3) + b3
loss = tf.sparse_softmax_cross_entropy_with_logits(logits, labels)
Run Code Online (Sandbox Code Playgroud)

我有很多类(~10000),所以我想我得到了NaN,因为至少有一个我的例子中对应于正确类的logit被截断为零.有办法避免这种情况吗?

Dav*_*ida 9

事实证明我的一些标签超出了范围(例如标签为14000,当我的logits矩阵只有150 x 10000时).事实证明,这导致了NaN而不是错误.


nes*_*uno 5

tf.sparse_softmax_cross_entropy_with_logitslog(0)为您处理情况,您不必担心。

通常 aNaN是由于优化算法的高学习率。尝试降低它直到NaN错误消失并且损失开始减少