我有一个卷积神经网络,我修改了它的架构。我没有时间重新训练并执行交叉验证(对最佳参数进行网格搜索)。我想直观地调整学习率。
如果出现以下情况, 增加或降低我的RMS(基于SGD)优化器的学习率:
答案 0 :(得分:11)
添加更多层/神经元会增加过度拟合的可能性。因此,如果随着时间的推移降低学习率会更好。删除子采样层也会增加参数的数量,并再次增加过度拟合的机会。强烈建议,至少通过实证结果证明,子采样层可以帮助模型更好地学习。所以避免删除它们。
另外,我建议您通过裁剪图像生成更多示例,并使用这些裁剪版本训练模型。这作为正则化器有助于模型学习更好的数据分布。然后你也可以增加层/神经元的数量,减少过度拟合的风险。
答案 1 :(得分:2)
我们都同意,学习率可以被视为一种控制过度拟合的方法,就像辍学或批量大小一样。但是我写这个答案是因为我认为Amir的答案和评论中的以下内容具有误导性:
添加更多层/神经元会增加过度拟合的机会。 因此,如果您降低学习速度超过 时间。
由于在模型中添加了更多的层/节点,因此易于 过度拟合[...] 建议朝着局部最小值采取小步骤
实际上是反对!较小的学习率会增加过度拟合的风险!
引自Super-Convergence: Very Fast Training of Neural Networks Using Large Learning Rates (Smith & Topin 2018)(非常有趣的一读):
正规化的形式很多,例如学习率高, 小批量,重量下降和脱落。从业者必须 平衡每个数据集的各种形式的正则化和 架构以获得良好的性能。 减少其他形式 正则化和正则化的学习率很高 大大提高了培训效率。
因此,正如Guillaume Chevalier在他的第一则评论中说的那样,如果您添加正则化,如果要保持正则化的总量不变,降低学习率可能是个好主意。但是,如果您的目标是增加正则化的总体数量,或者您减少了其他正则化方法(例如,减少辍学,增加批次大小),则应提高。
>相关(也非常有趣):Don't decay the learning rate, increase the batch size (Smith et al. ICLR'18)。
答案 2 :(得分:1)
作为一个简短且实用的答案,如果模型更复杂,此处的学习率会降低,变量 FragmentManager manager = getSupportFragmentManager();
Fragment fragment = new FragmentA();
// if already exists remove it and add again
if(fragment!= null) {
manager.beginTransaction().remove(fragment).commit();
}
manager.beginTransaction().add(R.id.fragment_id, fragment).commit();
大约是每层神经元的数量:
<Style x:Key="MultiSelectCombo" TargetType="{x:Type ComboBox}">
<Setter Property="SnapsToDevicePixels" Value="True"/>
...
<Setter Property="Template">
<Setter.Value>
<!-- Put the control template you used in your UserControl -->
</Setter.Value>
</Setter>
<Setter Property="ItemTemplate">
<Setter.Value>
<!-- Put the DataTemplate you used in your UserControl -->
</Setter.Value>
</Setter>
</Style>