机器学习深度学习深度学习·神经网络·计算机视觉

深度学习调试技巧汇总

2019-04-15  本文已影响3人  深度学习模型优化

1 一些通用技巧

  1. 使用 ADAM 优化器
  2. ReLU 是最好的非线性
  3. 不要在输出层使用激活函数
  4. 为每一层添加一个偏置项
  5. 使用方差缩放初始化
  6. 白化(归一化)输入数据
  7. 以合理地保留动态范围的方式对输入数据进行缩放
  8. 一般不要使用学习率衰减
  9. 卷积层有 64 或 128 个滤波器,这就已经足够了
  10. 池化是为了变换不变性

2 一些调试技巧

  1. 调整学习率
  2. 调整(小)批量处理的规模
  3. 删掉批归一化层
  4. 检查你矩阵的重构
  5. 检查损失函数

3 卷积神经网络的设计思想

  1. 从LeNet5到VGG(基于深度的设计)
  2. 1*1卷积(基于升维降维的设计)
  3. GoogLeNet(基于宽度和多尺度的设计)
  4. MobileNets(基于分组卷积的设计)
  5. 残差网络
  6. 非正常卷积(基于不规则卷积和感受野调整的设计)
  7. 密集连接网络(残差网络的升级,极致的不同层间的信息融合)
  8. 非局部神经网络(充分提高层内感受野的设计)
  9. 多输入网络(一类有多种应用的网络)
  10. 3D卷积(将卷积升维到3D空间设计)
  11. RNN和LSTM(时序网络结构模型)
  12. GAN(近两年最火的下一代无监督深度学习网络)
  13. VGG
  14. NASNet
  15. 轻量化网络(适用于移动端的算法)- MobileNet系列和ShuffleNet系列

4 CNN中的奇技淫巧

  1. 卷积只能在同一组进行吗?-- Group convolution
  2. 卷积核一定越大越好?-- 3×3卷积核
  3. 每层卷积只能用一种尺寸的卷积核?-- Inception结构
  4. 怎样才能减少卷积层参数量?-- Bottleneck
  5. 越深的网络就越难训练吗?-- Resnet残差网络
  6. 卷积操作时必须同时考虑通道和区域吗?-- DepthWise操作
  7. 分组卷积能否对通道进行随机分组?-- ShuffleNet
  8. 通道间的特征都是平等的吗? -- SEnet
  9. 能否让固定大小的卷积核看到更大范围的区域?-- Dilated convolution
  10. 卷积核形状一定是矩形吗?-- Deformable convolution 可变形卷积核

上面10个技巧的主要思想总结如下:
卷积核方面

卷积层通道方面

卷积层连接方面

5 工业界使用的深度学习高效网络结构设计

首先是三巨头的雏形

升级版

还有一个耿直boy

高效网络的设计思想有:
1、depthwise separable convolutions
2、low rank filter
3、pointwise group convolution
4、避免网络分支太多,或者group太多
5、减少element wise的操作

6 图像分类算法优化技巧

加快模型训练部分
1、增大学习率
2、用一个小的学习率先训几个epoch(warmup)
3、每个残差块的最后一个BN层的γ参数初始化为0
4、不对bias参数执行weight decay操作

优化网络结构部分
1、ResNet-B
2、ResNet-C
3、ResNet-D

模型训练调优部分
1、学习率衰减策略采用cosine函数
2、采用label smoothing
3、知识蒸馏(knowledge distillation)
4、引入mixup

上一篇下一篇

猜你喜欢

热点阅读