在训练时,accuracy不变,loss一直在降低是啥原因

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在训练时,accuracy不变,loss一直在降低是啥原因相关的知识,希望对你有一定的参考价值。

在训练过程中画出accuracy 和loss曲线能够更直观的观察网络训练的状态,以便更好的优化网络的训练。本文主要介绍在基于caffe框架训练网络时,如何利用caffe自带的一些实用的工具包来绘制曲线。
step1:保存日志文件
在训练过程中把终端输出的结果保存为一个日志文件,注意文件的后缀名必须是.log,这是因为后面再解析日志文件时有这个要求。如何把终端保存到日志文件,例子如下:
$TOOLS/caffe train --solver=$SOLVERFILE 2>&1 |tee out.log
step2:解析日志文件
这一步利用caffe中tools/extra文件夹下的parse_log.py来解析日志文件。具体例子如下:
python parse_log.py out.log ./ #两个参数,一个是日志文件,另一个是保存的路径
运行结束之后会发现在你保存的路径中会生成两个文件out.log.train和out.log.test
step3:绘制accuracy 和loss曲线。
利用caffe中tools/extra文件夹下的plot_training_log.py文件来绘制。
python plot_training_log.py 2 testloss.png out.log
这里要解释下,如果你直接运行这个是会报错的。因为在out.log.test文件是这样的。
NumIters,Seconds,TestAccuracy,TestLoss
0.0,2.318823,-1,0.360432
200.0,10.975734,-1,0.0757681
400.0,19.634317,-1,0.0610909
600.0,28.295885,-1,0.0554078
800.0,36.953475,-1,0.0510606
1000.0,45.644651,-1,0.0463909
load_data的时候第一行是不读的,要么你自己第一行加个#,要么就直接不读第一行。另外在split的时候不是用空格而是用‘,’因此做如下修改。
def load_data(data_file, field_idx0, field_idx1):
data = [[], []]
with open(data_file, 'r') as f:
num=len(f)
for line_num in range(1,num):#此处修改
line = f[line_num].strip()
#if line[0] != '#':#此处修改
fields = line.split(',')#此处修改
data[0].append(float(fields[field_idx0].strip()))
data[1].append(float(fields[field_idx1].strip()))
return data
上面还有个地方需要解释就是那个2是什么意思,这个你直接运行下Python plot_training_log.py就会打出帮助信息,就能看见了。
以上就是利用caffe自带的工具包绘制曲线的方法。
参考技术A 交叉时网络的性能正好,再训练就可能要过拟合了。 参考技术B 比如binary cross-entropy,loss的减少并不意味着accuracy的提高。考虑label1,第1、2、3步的预测0.2、0.4和0.6以及分类阈值0.5,步骤1和步骤2的loss降低,但accuracy不变。

深度学习中训练loss一直不变

训练loss一直不变

在之前的文章中,分别做了LeNet,NiNNet,AlexNet,VGGNet的训练测试,在NiN和VGG中,经常遇到训练时loss一直居高不下的原因,网上较为完善的解释一般如下:

我应该属于其中的第四种,反复修改了学习率,损失函数和momentum参数后,跑了很久它终于开始收敛了,数据集大概有60k,在经过两个epoch后,开始收敛,可能是由于心浮气躁,每次测试都只让记录了几个batch参数,每个batch1500张训练图左右,没看到效果,便认为它已经没有进步了放弃了,甚至怀疑自己是否让这个网络参数更新了吗,后面loss终于开始变了以后,才松了一口气,在此记录一下,以便以后查看。

以上是关于在训练时,accuracy不变,loss一直在降低是啥原因的主要内容,如果未能解决你的问题,请参考以下文章

深度学习中训练loss一直不变

深度学习中训练loss一直不变

TensorFlow中loss与val_lossaccuracy和val_accuracy分别是什么含义

Caffe---自带工具 绘制loss和accuracy曲线

训练网络中出现loss等于Nan的情况几种思路

keras中accuracy是怎么算出来的,为啥loss下降,accuracy不变甚至减小