caffe训练CNN时,loss不收敛原因分析
来源:互联网 发布:html用js做打字效果 编辑:程序博客网 时间:2024/05/21 17:31
1. 数据和标签
数据分类标注是否准确?数据是否干净?
另外博主经历过自己创建数据的时候数据标签设置为1,2,...,N,训练的时候最后FC层设置的输出output num为N。训练的时候loss一直不降。后来将标签改为0,1,2,...,N-1,重新训练,很快就收敛了。
为啥label需要从0开始?
在使用SoftmaxLoss层作为损失函数层的单标签分类问题中,label要求从0开始,例如1000类的ImageNet分类任务,label的范围是0~999。这个限制来自于Caffe的一个实现机制,label会直接作为数组的下标使用,具体代码SoftmaxLoss.cpp中133行和139行的实现代码。
132行第一层for循环中的outer_num等于batch size,对于人脸识别和图像分类等单标签分类任务而言,inner_num等于1。如果label从1开始,会导致bottom_diff数组访问越界。
在标签正确的前提下,如果倒数第一个全连接层num_output > 实际的类别数,Caffe的训练是否会报错?答案:不会报错且无影响。
2. 学习率设定
base_lr这个参数在自己训练新网络时,可以从0.1开始尝试,如果loss不下降的意思,那就降低,除以10,用0.01尝试,一般来说0.01会收敛,不行的话就用0.001. 另外整个训练过程中学习率是可变的,可以在solver文件中指定学习率的变化规则。如:
# The base learning rate, momentum and the weight decay of the network.
base_lr: 0.01
momentum: 0.9
weight_decay: 0.0005
# The learning rate policy
lr_policy: "inv"
gamma: 0.0001
power: 0.75
引用一张图来说明学习率设定对训练的影响:
3. 网络设定不合理
如果做很复杂的分类任务,却只用了很浅的网络,可能会导致训练难以收敛。
参考资料:https://www.cnblogs.com/maohai/p/6453417.html
- caffe训练CNN时,loss不收敛原因分析
- caffe分类训练不收敛原因分析
- Caffe训练分类器不收敛,loss居高不下
- Caffe 训练时loss等于87.33的原因及解决方法
- 使用caffe训练时Loss变为nan的原因
- Caffe 训练时loss等于87.33的原因及解决方法
- Caffe 训练时loss等于87.33的原因及解决方法
- 使用caffe训练时Loss变为nan的原因
- Caffe 训练时loss等于87.33的原因及解决方法
- 使用caffe训练时Loss变为nan的原因
- 使用caffe训练时Loss变为nan的原因
- Caffe 训练时loss等于87.33的原因及解决方法
- caffe训练时loss=nan的原因
- 使用caffe训练时Loss变为nan的原因
- 卷积神经网络/CNN/深度学习在做分类训练时不收敛的解决方案
- DL训练遇到不收敛情况分析
- FCN训练不收敛的原因分析和最详细的FCN训练与测试自己的数据程序配置
- 转:Caffe 训练时loss等于87.33的原因及解决方法
- 使用busybox制作rootfs
- 学习记录-----NIO(一)
- Reading Property Attributes
- 高并发系统的一些处理策略
- 【Scikit-Learn 中文文档】分解成分中的信号(矩阵分解问题)
- caffe训练CNN时,loss不收敛原因分析
- .Net 与 Java联系
- Redis 学习笔记(十五)Redis Cluster 集群扩容与收缩
- JSON.parse()和JSON.stringify()
- eclipse连接数据库并创建表
- 程序员英文
- isc dhcp
- 配置servlet用注解和web.xml都没作用,报404错误以及500错误的解决
- 第二章--第二节 sigmoid函数是什么鬼?