首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >神经学习的准确性成为NaN (tensorflow)

神经学习的准确性成为NaN (tensorflow)
EN

Stack Overflow用户
提问于 2018-03-26 19:17:24
回答 1查看 79关注 0票数 1

我用tensorflow来给灰度图像着色。因此,我使用sigmoid_cross_entropy_with_logits(),并使用tf.train.AdadeltaOptimizer()将其最小化。我训练它并打印

代码语言:javascript
复制
correct_prediction = tf.norm(y_ - y_conv)

但是经过几次迭代,它给了我nan

代码语言:javascript
复制
step 0, acc 2068538.88
step 1, acc 287121.97
step 2, acc 82377.69
step 3, acc 31250.95
step 4, acc 16694.72
step 5, acc 10168.58
step 6, acc 6993.02
step 7, acc nan
step 8, acc nan
step 9, acc nan

什么意思?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-26 19:42:48

软件最大和交叉熵损失不是您的输出层的正确选择。

首先,交叉熵最小化了熵,并且需要一个0,1的域。虽然你的像素值可能被标准化为0,1的范围,交叉熵的工作方式并不像你期望的那样。交叉熵是分类的最优方法.你应该用平方误差和作为你的损失。

更大的问题是,您正在将softmax应用于您的形象。看看softmax是如何工作的,您会对它有一种直观的感觉,并且可能会看到出了什么问题:

http://neuralnetworksanddeeplearning.com/chap3.html#softmax

Softmax要求所有输出(图像像素)之和等于1,这意味着许多像素将被强制为0。这与你的损失函数很不一致。

我敢打赌,标签中的一些像素接近1.0,而softmax在0.0附近推了这么多像素,至少有几个像素应该是1.0,最后预测值接近0.0。

交叉熵有一个无限的损失,当它是错误的幅度为1.0,这是一个条件,你是强迫它由你选择的软件,因此支付它与NaN的发生,因为极端的梯度。

正确的解决方案是使用非缩放输出,并将平方错误损失应用于您的非缩放输出(没有softmax、无sigmoid、没有relu、只有逻辑,也就是您的输出层,而没有在输出层之上应用任何内容)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49499029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档