caffe训练CNN时,loss不收敛原因分析
2017-11-29 11:46
2891 查看
深度学习交流QQ群:116270156
1. 数据和标签
数据分类标注是否准确?数据是否干净?
另外博主经历过自己创建数据的时候数据标签设置为1,2,...,N,训练的时候最后FC层设置的输出output num为N。训练的时候loss一直不降。后来将标签改为0,1,2,...,N-1,重新训练,很快就收敛了。
在使用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数组访问越界。
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
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分类训练不收敛原因分析
- train loss与test loss结果分析(接利用caffe的solverstate断点训练)
- 使用caffe训练时Loss变为nan的原因
- Caffe - 使用caffe训练时Loss变为nan的原因
- Caffe 训练时loss等于87.33的原因及解决方法
- 使用caffe训练时Loss变为nan的原因
- caffe训练打印log分析train loss和test loss并绘制变化曲线
- Caffe 训练时loss等于87.33的原因及解决方法
- caffe训练时loss=nan的原因
- 使用caffe训练时Loss变为nan的原因
- 使用caffe训练CNN,Loss不下降,维持在某个数字-log(类别数)
- Caffe 训练时loss等于87.33的原因及解决方法
- Caffe 训练时loss等于87.33的原因及解决方法
- Caffe 训练时loss等于87.33的原因及解决方法
- 使用caffe训练时Loss变为nan的原因
- 使用caffe训练时Loss变为nan的原因
- 使用caffe训练时Loss变为nan的原因
- tensorflow中mnist 使用cnn模型训练的输出层数为7x7的原因
- 使用caffe绘制训练过程的loss和accuracy曲线
- caffe(7) 训练自己的CNN网络—基于自己建立的数据集