深度神经网络调参经验

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lanchunhui/article/details/62422835
  • σ()=σ()(1σ())tanh=1tanh2
  • batch_size:将数据集划分为不同的 batch,是为了限制 RAM 的使用,防止内存溢出;
    • batch_size = 256;
  • 层的神经网络,对于着 1 个层间权值矩阵;

0. 简单参数

  • hyperparameters:
    • learning rate:一般从 0.01 开始设起,变化的幅度为 10 倍;

1. 激活函数:做非线性映射

  • Sigmoid 和 tanh 激活函数的问题在于,在函数的最左侧和最右侧,斜率为 0;

    • 这样当 BP 时,复合函数的求导(连乘) ==> 导致梯度消失;
    • ReLU 收敛的速度要比 tanh 的速度快 6 倍,其收敛速度足够快;
  • CNN 尽量不要用 sigmoid(RNN 会用到 Sigmoid 和 tanh)

    • 首先试 ReLU,因为快,但需要小心;
    • 如果 ReLU 失效,使用 Leaky ReLU 或者 Maxout
  • 当然神经网络的输出层一般还是 Sigmoid 函数,因为其值接近于概率输出分布;

2. 池化层的选择

池化层(Pooling Layer),downsampling,压缩数据和参数的量,减少过拟合;

  • 图像识别一般使用 maxpooling
  • neural style 使用 average pooling

3. 深度模型的结构

  • CNN
    - Input
    • [ [CONV -> ReLU]*N -> Pool ?]*M
      • ? 表示可能会接池化层
    • [FC -> ReLU] * K
    • FC

4. 从框架的角度

  • caffe:
    • 每一层都可以定义 learning rate,因此可以分段调整学习率(learning rate)

没有更多推荐了,返回首页