Caffe调参经验

假设现在你要在一批数据集上训练出一个caffe模型, 你要怎么做?训练中遇到的问题,要如何解决?仔细看下去吧!

第一步: 数据清洗

训练集和测试集是否同分布?

用cross validation去做验证。 如果CV训练结果OK, 但trainset上训练的模型,在testset上很差,则基本判定trainset和testset分布不一致, 数据需要继续清洗。

样本分布均衡吗?

深度学习对不均衡很敏感,这点不如以前的机器学习方法。处理不均衡的方法有一下几种
* 对样本数少的类别做上菜样。 比如直接复制,或者做一些旋转,形变,光照变换,翻转等,高级点的方法还有把样本变换到某个空间里去,空间内两个样本点连线的中点映射回来新样本。
* 对样本数比较多的类别做下采样。这个没什么好解释的的了,直接抽点即可。 高级点的可以考虑下保持原本的样本分布。
* 把样本数目较多的类别拆分成N个子集合,每个子集合和其他类别构成一个均衡的训练集,单独训练出一个分类器,最后多个分类器构成ensemble 分类器。
* 对样本数目较多的类别做聚类,用聚类中心参与训练
* 设计分类器支持不均衡的样本训练,比如xgboost,这个比较高端了

第二步:模型选择

这里主要考虑模型的复杂度和问题复杂读的匹配。

简单模型 复杂模型
简单问题 适合
复杂问题 欠拟合概率大

具体到深度学习,什么是模型复杂度?什么是问题复杂度? 一个直观的回答是模型的层数越多,模型越复杂,样本的数目越多, 问题越复杂。 1w个样本的训练集, 一两个卷积层就足够了(当然构成网络只有卷积层是不够的), 10w个样本的训练集,四五个卷积层就足够了。要知道当年stat-of-art的VGG也不过19层,所以样本数目不是很多时,不要考虑太深的网络。

第三步:训练初始化

  • 进行在线的data augment
    **什么是”在线data augment”? 比如caffe里solver.prototxt里的mirror/crop等. 因为DL是每次读取一个batch的样本,做data augment, 然后送入网络训练,所以即使同一个图,每次读入网络时可能做了不同的
    augment,所以区别于先做好augment,送入训练程序,训练过程中不会再做data augment的方式.这种所谓的
    “在线 data augment”也只有DL这种支持特征学习的方法可以用,以前仅仅支持特征分类的方法是不能用的,
    否则每次训练程序面对的特征分布都可能发生变化,对其收敛性将是极大的挑战**
    在线的data augment必须打开,否则调参没有意义!!!
    当然data augment只需要对trainset使用,不能应用到validset!!!
  • 学习速率初始可以考虑0.1或0.01, 采用定步长模式,几万轮的间隔降低一个数量级
  • weight-decay初始化小一点,比如0.00005
  • batchsize设置50~200之间,太小则SGD过于随机,太大要考虑显存,而且太大的容易陷入局部最小
  • 第一次尝试可以可以不用dropout,不过建议增加BN层
  • 另外建议channel mean,而不是pixel mean

第四步:训练调参

在线Data augment很重要,data augment做好了,则后面调调学习速率即可,否则可能调了半天,提升不到1个点, 利用好crop_size.训练中主要关注的是test loss和train loss,不要被test accuracy迷惑了。
* Test loss 和 train loss 都在下降,理想状态, 等着即可
* train loss下降, test loss不变或者升高,过拟合了,增大weight-decay,增加dropout都可以
* train loss不变或升高, test loss降低, 诡异现象,很可能是哪里配置出错了
* train loss和test loss都不变, 有两种可能, 1)接近一个最小点,考虑降低学习速率 2)不收敛,如果数据没问题,就把过拟合的约束放松
* train loss和test loss都升高, 配置错误或者数据问题

关于学习速率的调整

有两个较好的策略
* 使用multistep策略, 从0.1开始尝试,观察到test loss升高,则终止训练,降低lr后重启训练,如此类推
* 先用adam策略,lr设置成较小的值,比如0.0001,一般会得到一个不错的结果,然后以此结果为参考,利用SGD
精调. 还有一个方式是,先用adam策略跑几十个轮次,然后切换到SGD方式

处理矩阵过拟合的方法

  • 扩充样本量
  • 降低模型复杂度
  • 增加dropout层,可以延缓过拟合问题
  • weight_decay适当增大

几个理想状态的日志可视化结果:

Caffe调参经验_第1张图片
Caffe调参经验_第2张图片

你可能感兴趣的:(深度学习)