深度学习这么调参训练_深度学习调参及训练技巧(转)

深度学习调参及训练技巧(转)

作者:婉儿飞飞

链接:https://www.jianshu.com/p/0b116c43eb16

来源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

1. 调参

训练技巧对深度学习来说是非常重要的,作为一门实验性质很强的科学,同样的网络结构使用不同的训练方法训练,结果可能会有很大的差异。这里我总结了近一年来的炼丹心得,分享给大家,也欢迎大家补充指正。

参数初始化

下面几种方式,随便选一个,结果基本都差不多。但是一定要做。否则可能会减慢收敛速度,影响收敛结果,甚至造成Nan等一系列问题。

下面的n_in为网络的输入大小,n_out为网络的输出大小,n为n_in或(n_in+n_out)*0.5

Xavier初始法论文:[http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf](http://link.zhihu.com/?target=http%3A//jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf)

He初始化论文:[https://arxiv.org/abs/1502.01852](http://link.zhihu.com/?target=https%3A//arxiv.org/abs/1502.01852)

* uniform均匀分布初始化: w = np.random.uniform(low=-scale, high=scale, size=[n_in,n_out])

* Xavier初始法,适用于普通激活函数(tanh,sigmoid):scale = np.sqrt(3/n)

* He初始化,适用于ReLU:scale = np.sqrt(6/n)

* normal高斯分布初始化: w = np.random.randn(n_in,n_out) * stdev # stdev为高斯分布的标准差,均值设为0

* Xavier初始法,适用于普通激活函数 (tanh,sigmoid):stdev = np.sqrt(n)

* He初始化,适用于ReLU:stdev = np.sqrt(2/n)

* svd初始化:对RNN有比较好的效果。参考论文:[https://arxiv.org/abs/1312.6120](http://link.zhihu.com/?target=https%3A//arxiv.org/abs/1312.6120)

一次惨痛的教训是用normal初始化cnn的参数,最后acc只能到70%多,仅仅改成xavier,acc可以到98%。

还有一次给word embedding初始化,最开始使用了TensorFlow中默认的initializer(即glorot_uniform_initializer,

也就是大家经常说的无脑使用xavier),训练速度慢不说,结果也不好。

改为uniform,训练速度飙升,结果也飙升。

所以,初始化就跟黑科技一样,用对了超参都不用调;没用对,跑出来的结果就跟模型有bug一样不忍直视。

数据预处理方式

zero-center ,这个挺常用的. X -= np.mean(X, axis = 0) # zero-center X /= np.std(X, axis = 0) # normalize

PCA whitening,这个用的比较少.

训练技巧

要做梯度归一化,即算出来的梯度除以minibatch size

clip c(梯度裁剪): 限制最大梯度,其实是value = sqrt(w12+w22….),如果value超过了阈值,就算一个衰减系系数,让value的值等于阈值: 5,10,15

dropout对小数

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值