2017.10.24代码调试记录

accuracy值不变,loss值为non或inf

训练和测试的Accuracy和Loss曲线,准确度曲线无变化,损失曲线没有,因为损失值是Non 或者Inf。学习率从0.1、0.01都是这样的。

2017.10.24代码调试记录_第1张图片
2017.10.24代码调试记录_第2张图片

后来将学习率减小到0.001,损失值有实值了,但是准确率仍然不变。


2017.10.24代码调试记录_第3张图片
如果train loss一直在下降,而test accuracy没什么变化,可能是过拟合的问题。要么降低lr,要么就该停止训练了
2017.10.24代码调试记录_第4张图片



参考:

解决Caffe训练过程中loss不变问题

softmax在计算的过程中得到了概率值出现了零,由于softmax是用指数函数计算的,指数函数的值都是大于0的,所以应该是计算过程中出现了float溢出的异常,也就是出现了inf,nan等异常值导致softmax输出为0.

当softmax之前的feature值过大时,由于softmax先求指数,会超出float的数据范围,成为inf。inf与其他任何数值的和都是inf,softmax在做除法时任何正常范围的数值除以inf都会变成0.然后求loss就出现了87.3356的情况。

解决办法

由于softmax输入的feature由两部分计算得到:一部分是输入数据,另一部分是各层的权值等组成

减小初始化权重,以使得softmax的输入feature处于一个比较小的范围

降低学习率,这样可以减小权重的波动范围

如果有BN(batch normalization)层,finetune时最好不要冻结BN的参数,否则数据分布不一致时很容易使输出值变得很大(注意将batch_norm_param中的use_global_stats设置为false)。

观察数据中是否有异常样本或异常label导致数据读取异常

本文遇到的情况采用降低学习率的方法,learning rate设置为0.01或者原来loss的1/5或者1/10。

Caffe 训练时loss等于87.33的原因及解决方法

测试loss不降反升

加深网络层数,现在用的是5层全连接网络,relu激活函数,softmax分类器,

Adam优化器,损失函数是tf.nn.softmax_cross_entropy_with_logits(logits= , labels= )。


2017.10.24代码调试记录_第5张图片
训练阶段的曲线变化正确


2017.10.24代码调试记录_第6张图片
测试阶段准确率只有50%,loss损失函数不正确。test loss 不断升高,不论正确率是否提高,这都是过拟合的一种表现,建议加上正则化手段

参考:www.zhihu.com/question/65439175

训练一个含3个隐含层的采用批规范化的2分类神经网络,随着参数的不断更新,测试集loss会上升,而测试集准确率却比开始时要高,请问这正常吗?

正常,很容易碰到。你用的是交叉熵,理论上,甚至可以通过给最后层权值乘以一个常数来改变 loss,同时却又不影响分类边界,也就是分类正确率保持不变。

不过你的 test loss 不断升高,不论正确率是否提高,这都是过拟合的一种表现,建议加上正则化手段。batch normalization 按原论文的说法,是减少 internal covariate shift 从而加速训练的手段,对过拟合有没有效果,至少我是不太信任的(,虽然原论文 3.4 节中有一段豆腐干大的文字表示自己连正则化都能包了,传说的一针见效啊 XD)。

减小网络层数

3层全连接,稍微 有些许变化,但还不够。

此时的网络参数:K(h1)=500, L(h2)=100, output=4

learining rate = 0.001  iter=800

All cost time:  167.1950433254242


2017.10.24代码调试记录_第7张图片
Train Accuracy:  1.0


2017.10.24代码调试记录_第8张图片
Test Accuracy:  0.65

你可能感兴趣的:(2017.10.24代码调试记录)