概述
NaN
- 计算softmax loss时要用numeric robust 的计算方式. softmax与 loss可能要分开计算. 得到前者的计算方式可以是常规方法. 但计算后者时要注意无穷大和NaN的出现.
- NaN的出现一定是因为出现了无穷大. 无穷大的出现则是因为变量存储的数值超出了变量数据类型能表示的最大值.使用GPU计算常用float32, 它的最大表示值在(10^{38.5})附近.
- learning_rate太大可能导致非数的出现: weight值会变得很大(超过10应该就算大了). 在forward的过程中会不断乘以weight值, 这样就会导致神经元的激活值达到无穷大. 然后, 只要碰到值为0的weight(小概率)或与其他的无穷大, 就会出现NaN.
- 像素级别的loss的取均值决定learning_rate的数量级. 我使用(224times 224)的图片, 如果loss是对单个像素的均值, 则数量级在(10^{-5}). 如果是对单张图片的loss, 要再小4个数量级.(caffe fcn使用了(10^{-10}))
- 出现问题时要积极寻找到问题来源, 重要的问题说三遍:出现问题时要积极寻找到问题来源, 出现问题时要积极寻找到问题来源. 不能瞎猜, 更不能直接放弃.
loss不下降了
- 先尝试使用更小的learning_rate, 如果不行, 就尝试更大的. 在使用不同大小的learning_rate训练网络的过程中, learning_rate并非一定要递减. 这是亲身体验过的. 原因不明, 可能是因为大的learning_rate让weight set跳入了一个更好的basin.
转载于:https://www.cnblogs.com/dengdan890730/p/6262661.html
最后
以上就是愤怒猫咪为你收集整理的Theano FCN实现与训练经验与教训小结NaNloss不下降了的全部内容,希望文章能够帮你解决Theano FCN实现与训练经验与教训小结NaNloss不下降了所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复