深度网络调参小技巧

深度网络调参小技巧

步骤
1、训练数据预处理,预处理的结果是否适用于该模型
2、判断模型是否欠拟合或过拟合,当模型训练误差较大,则模型欠拟合,换一个更好的梯度下降算法降低学习率减弱正则化、增加隐藏节点数、增加网络层数都可以降低偏差;当模型验证误差较大,训练误差较小,则模型过拟合,可以増广训练数据、增强正则化(L1、L2、dropout);
3、以上都无法得到理想结果,则可以更换更强的网络模型

模型参数项详解

  1. 训练数据
    (1)首先深入理解数据概况,有多少张图,图像质量如何,难易程度如何,图像的大小分布和图像的长宽比分布如何,可以的话,人眼逐一浏览每张图,做到心中有数,即使不能逐一浏览,也要抽一些看看;
    (2)训练时要做图像增广,增广后的图一定要与现实场景的图是相似的,避免过度增广引入非真实场景中的“模式”;
    (3)统计不同类别的数量,考虑是否要做类别均衡,困难样本是否要给样本权重;
    (4)模型输入的尺寸不能太小,如果resize太小,图中的小目标可能就不见了,那当然就提取不到这个小目标的特征;
    (5)如果训练数据的量小于一万,建议加载ImageNet上的预训练参数模型进行训练;
    (6)归一化输入,即减均值、除方差,可以加速训练;
    (7)划分训练、验证、测试集时,一定要保证数据同分布,同分布的含义是三个数据集都是来自于相同的数据源;

  2. batch_size
    一般设为8、16、32、64、128、256等2的幂次值,batch_size越小梯度下降方向变化越大,可能导致训练不收敛,batch_size越大梯度下降方向越稳,但是有如下几个缺点:
    (1)所需的内存和显存都越大,有可能撑爆机器;
    (2)由于计算好大一批数据才进行一次梯度下降,会导致达到相同精度所需的训练时间变长;
    batch_size一般不影响最终精度,主要影响训练速度,每次做不同的训练任务,应该去尝试、总结合适的batch_size值,最后跑该类任务时就固定使用该batch_size

  3. 优化器
    指梯度下降的计算方法,常用的有三种:momentum、RMSprop和Adam,主要影响训练速度。最常用的是Adam,基本可以固定用该优化算法

  4. 学习率
    一般手动调整,初始为1e-4,可以使训练快一点,一段时间loss不降后,学习率过大会可能会造成在最优值附近震荡,此时可以手动改成1e-5,逐步下降到最优点

  5. 正则化
    如果发现在训练集上loss较低,但验证集上loss较高时,则可以表明模型的方差可能是偏大了,可以使用dropout

  6. batch norm
    归一化隐藏层的激活值,并不对所有网络都适用,但当适用时,可以使深层的网络学习更容易些。有些模型(比如resnet50)已经在网络结构定义中加入了BatchNormalization,不需要自己再去添加。另外batch norm还有一个作用是,它还有一点正则化的效果

  7. 增加隐藏节点数
    增加模型复杂度

  8. 增加网络层数
    增加模型复杂度

  9. 更换整个网络
    有时候调了很多参数,训练误差和验证误差总是降不下来,也许换一个更优秀的网络,直接就能得到更小的训练误差和验证误差。注意,更换网络时,不能盲目地更换,一定要了解该网络模型是做什么的?解决了什么问题?擅长处理什么问题?

如果训练集错误率可接受了,与验证集错误率相差也不大了,接下来可以分析在测试集上的错误率,最好是对每张预测出错的图进行分析,总结模型出错的原因,对错误类型进行分类归纳,再决定下一步调试模型的计划。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值