您的位置:首页 > 其它

深度学习模型训练技巧

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下降到了零点几,准确率也升到了很高,那自然不用调)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息