神经网络调参数总结

收集的神经网络不收敛参考

  1. 参考这个外文链接
  • 主要是一些参数的设置,如何去逐项检查以及如何检查,当然还有为什么要检查
  • 包括:正则项、分析结果、预处理、数据归一化、网络内部错误变化
  1. 可视化是一个重要的方式可以帮你理解网络的特征走向,如tensorboard及变种mxboard之类的可以很好的帮助分析权值的分布状态等。最近还出来tensorspace可能更多维的帮助分析

我的经验

  1. 有些预处理、设置的错误容易忽视,所以一开始就做好一个demo后,重新开始规划整个逻辑:包括网络和常规的输入、特殊网络结构、还有如何设置检查点等等。
  • 慢慢的检查这些项,最好是列个表来逐项检查,事实证明这样一点也不会慢,反而能节省时间
  • 开始训练之后,首先去排除非网络的错误,这一项是第一项的补充,在运行时分析有没有这种错误的发生
  • 等检查正确后,选择快速运行几个iteration,查看loss大致的变化趋势,调整学习率等
  • 记录权值矩阵的分布变化情况,是不是有持续的剧变发生,这儿需要去分析
  • 对于回归项,除了直接查看loss,还可以将真值的分布也显示出来,和网络的输出做对比。
  • 对于网络的特殊的结构,比如自定义的模块,则需要等其他的模块尽量保证正确的情况下再去试验
  • 设置合理的预期或者中间变量或者临时检查点,比如把中间结构参数拿去预测,看其输出和真实目标相差的地方,或目视检查的结果

特殊的情况

  • 我在训练一个回归为主loss的网络时,出现了脉冲式的loss下降,像下图一样:
    神经网络调参数总结_第1张图片

  • 这是在caffe中训练的结果,本以为是框架的原因,换作mxnet,再训练还是出现了这样的结果,如下图:依据有明显的脉冲特点
    神经网络调参数总结_第2张图片

  • 而另外一种就好了许多,且看下图,这种是去掉了空间范围(人脸框)的抖动的结果,虽然还有,但是好了很多,最关键的是在验证集上好了很多。
    神经网络调参数总结_第3张图片

简单的总结

使用回归的方式处理关键点的方法,和基础网络的特征提取固然有一定的关系,但是和输入的框的大小也是密切相关的。最直观的现象就是更换了人脸检测器,再使用此关键点回归网络,往往精度会出现大的波动。
当然,还有使用heatmap热力图的方式来处理的,这种方式鲁棒性更强,但是往往也是更重的网络。

你可能感兴趣的:(深度学习)