1、参数初始化
几种方式,结果差不多。但是一定要做。否则可能会减慢收敛速度,影响收敛结果,甚至造成Nan等一系列问题。
优秀的初始化应该使得各层的激活值和状态梯度的方差在传播过程中的方差保持一致。不然更新后的激活值方差发生改变,造成数据的不稳定。
Xavier初始化 :
- 条件:正向传播时,激活值的方差保持不变;反向传播时,关于状态值的梯度的方差保持不变。
- 论文:http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf
- 理论方法:
- 假设激活函数关于0对称,且主要针对于全连接神经网络。适用于tanh和sigmoid。
He初始化:
条件:正向传播时,状态值的方差保持不变;反向传播时,关于激活值的梯度的方差保持不变。
理论方法
- 适用于ReLU的初始化方法:
- 适用于Leaky ReLU的初始化方法:
其中
具体方法
下面的n_in为网络的输入大小,n_out为网络的输出大小,n为n_in或(n_in+n_out)/2
uniform均匀分布初始化:
1
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)
- Xavier初始法,适用于普通激活函数(tanh,sigmoid):
normal高斯分布初始化:
1
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)
- Xavier初始法,适用于普通激活函数 (tanh,sigmoid):
svd初始化:对RNN有比较好的效果。参考论文:https://arxiv.org/abs/1312.6120
技巧
正确初始化最后一层的权重。如果回归一些平均值为50的值,则将最终偏差初始化为50。如果有一个比例为1:10的不平衡数据集,请设置对数的偏差,使网络预测概率在初始化时为0.1。正确设置这些可以加速模型的收敛。
2、数据预处理方式
zero-center
这个挺常用的.
1
2X -= np.mean(X, axis = 0) # zero-center
X /= np.std(X, axis = 0) # normalizePCA whitening
这个用的比较少.
3、梯度裁剪
实现方法见pytorch小操作
数据增强方法
该博客中的图片和代码来自其他博客,本博客做总结用
1.基本的数据增强方法
1)翻转Flip
包括水平翻转和垂直翻转
2)旋转Rotation
将图像旋转一个角度
3)平移Translations
上下左右移动物体
4)随即裁剪crop
5)加噪声—高斯噪声等
6)放射变换
7)平滑模糊图像
8)颜色空间变换
9)随机擦除法(随机去掉一部分区域)
2.高阶方法
1)GAN自动生成
可用DCGAN,DCGAN效果更好一些
2)条件GAN
通过冬天的图片生成夏天的图片
3)图片风格转移
参考博客
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 BaiDing's blog!
评论