深度学习模型训练技巧
2018-01-10 10:02
886 查看
博主以前都是拿别人的模型别人的数据做做分类啊,做做目标检测,搞搞学习,最近由于导师的工程需求,自己构造网络,用自己的数据来跑网络,才发现模型训练真的是很有讲究,很有技巧在里面,最直接的几个超参数的设置问题,以前都是听大牛说设置为32、64、128等数,但是到底设置为多少好呢,我今天跑的是一个自己的字符识别的数据集,我分别制作了30*30 100*100两种图片大小,以及分别是10类 800类 6394类的三种Tf_record来进行测试。
根据图片大小来选择网络和超参数:
如果你的图片不是很大的话,比如我的30*30,这个时候做分类的话我肯定不能用VGG和Resnet等这些大的经典网络了,要么把图像变大要么就是用小的网络来进行训练,或者可以把VGG里的pooling时的步长改成1也可以试试(我没试过~~~),如果类别不多(没有上千)就建议用小网络即可,如果是100*100的图片的话还是可以试试用VGG和Resnet等经典网络,
根据你的图片数量和类别数来选择batch_size:
一个理想的训练状态应该是loss缓缓的往下降,accurate缓缓的往上增,达到某个状态收敛了,下降和上升的曲线都是比较光滑且平缓的(下图所示的训练过程就比较的好),可以容许有一点点的波动,但不应该有很大的波动,如果你的训练样本少(少于1000)那直接用全梯度下降就好了,不需要用批梯度下降了,不是说不可以用批梯度,而是没必要,我们用批梯度的目的就是为了加快训练速度,其他并没什么用,用全梯度下降是最有效的训练方式,只是反向传播一次需要很久的时间,训练起来很慢,但是如果你的训练类别比较的多,建议batch_size不要选择太小,上千的类别数,batch_size起码弄个128的样子,不然会震荡严重。
根据网络规模和loss下降速度来选择学习率:
学习率的选择我们往往都是选择0.001、0.0001、0.00001、0.000001等中的一个,但是到底选择哪一个呢,最基本的原则,网络很复杂的情况下学习率不能太低,不然到传后面基本没梯度了,三五层的网络学习率起码要小于1*e-5,不然会下降过快导致震荡,刚开始的时候可以随意的选择一个学习率作为尝试,如果发现loss下降的过快,那就要调低学习率,反之可以相应的调高(当然前提发现是loss降不下去了,出现了较大的震荡,如果loss下降到了零点几,准确率也升到了很高,那自然不用调)
根据图片大小来选择网络和超参数:
如果你的图片不是很大的话,比如我的30*30,这个时候做分类的话我肯定不能用VGG和Resnet等这些大的经典网络了,要么把图像变大要么就是用小的网络来进行训练,或者可以把VGG里的pooling时的步长改成1也可以试试(我没试过~~~),如果类别不多(没有上千)就建议用小网络即可,如果是100*100的图片的话还是可以试试用VGG和Resnet等经典网络,
根据你的图片数量和类别数来选择batch_size:
一个理想的训练状态应该是loss缓缓的往下降,accurate缓缓的往上增,达到某个状态收敛了,下降和上升的曲线都是比较光滑且平缓的(下图所示的训练过程就比较的好),可以容许有一点点的波动,但不应该有很大的波动,如果你的训练样本少(少于1000)那直接用全梯度下降就好了,不需要用批梯度下降了,不是说不可以用批梯度,而是没必要,我们用批梯度的目的就是为了加快训练速度,其他并没什么用,用全梯度下降是最有效的训练方式,只是反向传播一次需要很久的时间,训练起来很慢,但是如果你的训练类别比较的多,建议batch_size不要选择太小,上千的类别数,batch_size起码弄个128的样子,不然会震荡严重。
根据网络规模和loss下降速度来选择学习率:
学习率的选择我们往往都是选择0.001、0.0001、0.00001、0.000001等中的一个,但是到底选择哪一个呢,最基本的原则,网络很复杂的情况下学习率不能太低,不然到传后面基本没梯度了,三五层的网络学习率起码要小于1*e-5,不然会下降过快导致震荡,刚开始的时候可以随意的选择一个学习率作为尝试,如果发现loss下降的过快,那就要调低学习率,反之可以相应的调高(当然前提发现是loss降不下去了,出现了较大的震荡,如果loss下降到了零点几,准确率也升到了很高,那自然不用调)
相关文章推荐
- 深度学习模型训练技巧
- CS231n 卷积神经网络与计算机视觉 7 神经网络训练技巧汇总 梯度检验 参数更新 超参数优化 模型融合 等
- [置顶] 深度学习模型训练流程
- 深度学习(十四):详解Matconvnet使用imagenet模型训练自己的数据集
- 手把手:我的深度学习模型训练好了,然后要做啥?
- 引用次数最多的深度学习论文出自谁手?(最优化/训练技巧篇)
- 模型训练技巧(待续)
- 深度学习 - 模型训练 技巧
- 【深度学习】笔记7: CNN训练Cifar-10技巧 ---如何进行实验,如何进行构建自己的网络模型,提高精度
- caffe模型训练小技巧
- 使用GOOGLE COLAB训练深度学习模型
- 用CNTK搞深度学习 (二) 训练基于RNN的自然语言模型 ( language model )
- SSD模型训练技巧小结
- 手把手:我的深度学习模型训练好了,然后要做啥?
- 选择性的加载网络模型的前几层训练(27)---《深度学习》
- 数据不够怎么训练深度学习模型?不妨试试迁移学习
- [原]有关Caffe训练好的模型在Python接口下使用分类不准确的问题解决
- 几篇神经网络训练语言模型文章的阅读
- 【Caffe】训练ImageNet模型
- 基于spark mllib的LDA模型训练Scala代码实现