caffe在cifar10 的example上给出了两个模型,一个是quick模式,一个是full模式,训练full模式时会出现loss=nan的错误(当然不会报错,不过出现这个结果就是bug)
自己google了一下,在github上找到了原因跟解决方案,原来是作者把用在cuda-convnet的模型照搬过来了,在caffe上的模型应该去掉LRN层,所以解决的方法很简单:将网络结构中所有的归一化层全部去掉,并修改下一层的bottom参数,然后就不会出现loss=nan的错误了。
当然,如果自己做实验时出现loss=nan的问题时,我的一个解决办法是修改学习率,改的小一点就不会出现错误了。实在不行,就把里面的relu函数变为sigmoid试一试,代价就是训练速度会非常非常慢。
还有一个要检查的点就是要看一下网络的结构是否合理,我在网上下载的network in network的网络结构,最后一层竟然没有一层全连接把输出变为类别数,这让训练陷入了要么出现nan要么结果一直不变的bug境地。