假设现在你要在一批数据集上训练出一个caffe模型, 你要怎么做?训练中遇到的问题,要如何解决?仔细看下去吧!
第一步: 数据清洗
训练集和测试集是否同分布?
用cross validation去做验证。 如果CV训练结果OK, 但trainset上训练的模型,在testset上很差,则基本判定trainset和testset分布不一致, 数据需要继续清洗。
样本分布均衡吗?
深度学习对不均衡很敏感,这点不如以前的机器学习方法。处理不均衡的方法有一下几种
* 对样本数少的类别做上菜样。 比如直接复制,或者做一些旋转,形变,光照变换,翻转等,高级点的方法还有把样本变换到某个空间里去,空间内两个样本点连线的中点映射回来新样本。
* 对样本数比较多的类别做下采样。这个没什么好解释的的了,直接抽点即可。 高级点的可以考虑下保持原本的样本分布。
* 把样本数目较多的类别拆分成N个子集合,每个子集合和其他类别构成一个均衡的训练集,单独训练出一个分类器,最后多个分类器构成ensemble 分类器。
* 对样本数目较多的类别做聚类,用聚类中心参与训练
* 设计分类器支持不均衡的样本训练,比如xgboost,这个比较高端了
第二步:模型选择
这里主要考虑模型的复杂度和问题复杂读的匹配。
简单模型 | 复杂模型 |
---|---|
简单问题 | 适合 |