深度学习-网络调参技巧

最近在做深度学习实验,跑一次实验轻则以小时计、重则以天计,实在没有那么多的时间可以等待,因此想想用尽可能少的实验次数,得到尽可能好的实验效果。这样的话,问题就可以归结为如何设计合适的网络结构、如何设计合适的训练策略,主要就是:

  1. 层数、每一层卷积核个数、卷积权重初始化方式、dropout ratio、BN、全连接层神经元个数、Relu等网络结构参数应该如何选?
  2. 学习率、decay等solver参数又该如何设置?

在参考炼丹实验室的基础上,并结合自己的体会,谈谈对调参的理解,大家如果有其他技巧,也欢迎多多交流。

  • 网络结构设计

如果我们在Cifar10数据集上进行实验,最好能够找几个在该数据集上效果较好的网络结构,看看别人的网络超参数是如何设置的,有什么共性(比如每一层卷积核的个数、大小、层数等)。原则就是“尽可能采用成熟的网络结构,近可能少改动网络结构”。

  • 实验的输出

一般情况下,在实验的时候会有,train loss、test loss、训练集准确率、测试集准确率,根据它们的特点,我们大致可以得出网络的状态。训练集准确率高、测试集准确率低,过拟合;训练集准确率低、测试集准确率低,欠拟合;训练集、测试集上的准确率和初始状态相比,没有明显的变化,网络在“徘徊”。

  • “过拟合”

这时候需要提高网络的泛化能力,例如引入dropout、或者增大已有dropout ration等。

  • “欠拟合”

这时候需要增强模型的拟合能力,,例如增加网络层数、增加节点数,减少dropout等。

  • “徘徊”

我现在面对的就是这样的状态,现在还没有明确的“应对指导思想”。

原文地址:https://www.cnblogs.com/everyday-haoguo/p/DL-Parameters.html