1. batch size 较小
一般情况下,我们在训练的时候,
a.在训练时所有BN层要设置use_global_stats: false(也可以不写,caffe默认是false)
b.在测试时所有BN层要设置use_global_stats: true
如果batch size较小,如为1,可以考虑在fine-tune的时候,将use_global_stats: true试试。

use_global_stats: false是使用了每个Batch里的数据的均值和方差;
use_global_stats: true是使用了所有数据的均值和方差。

  1. caffe 下与loss相关的一些说明:
- train loss 不断下降,test loss 不断下降,说明网络正在学习
- train loss 不断下降,test loss 趋于不变,说明网络过拟合
- train loss 趋于不变,test loss 趋于不变,说明学习遇到瓶颈,需要减小学习率或者批处理大小
- train loss 趋于不变,test loss 不断下降,说明数据集100%有问题
- train loss 不断上升,test loss 不断上升(最终变为NaN),可能是网络结构设计不当,训练超参数设置不当,程序bug等某个问题引起
- train loss 不断上下跳动,可能引起的原因:学习率过大,或者批处理大小太小

参考:
1 ​​​关于训练神经网路的诸多技巧Tricks​​​​https://oldpan.me/archives/how-to-use-tricks-to-train-network​​​

2 深度学习炼丹师的养成之路之——Batch size/Epoch/Learning Rate的设置和学习策略

3 ​​如何理解深度学习分布式训练中的large batch size与learning rate的关系?​​​​https://www.zhihu.com/question/64134994​​​

4 ​​Using Learning Rate Schedules for Deep Learning Models in Python with Keras​​​​https://machinelearningmastery.com/using-learning-rate-schedules-deep-learning-models-python-keras/​​​

5 深度学习参数调优杂记+caffe训练时的问题

6 caffe固定网络权重参数------遇到BatchNorm层和Scale层的时候

7 综述:深度神经网络模型压缩和加速方法