介绍
在keras中有很多初始化方法,比如全连接层的kernel、bias初始化等
简单的可以直接用类名(字符串),如下
model.add(Dense(64,
kernel_initializer='random_uniform',
bias_initializer='zeros'))
tf官方网站:
https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/keras/initializers
中文网站:
https://keras-cn.readthedocs.io/en/latest/other/initializations/
https://keras.io/zh/initializers/
为什么不使用 零 或 随机数 初始化权重
- 如果初始权重太小,则信号在穿过每一层时会收缩,直到太小而无用为止。
- 如果初始权重太大,则信号在穿过每一层时会不断增长,直到其太大而无法使用为止。
初始化类型
Xavier / Glorot初始化
Xavier初始化通过从均值为零和特定方差的分布中提取权重来初始化网络中的权重,
He Normal初始化
这种初始化方法在He-et-al于2015年提交的论文中广为人知,并且类似于Xavier初始化,系数乘以2。在这种方法中,权重的初始化要考虑到前一层的大小,这有助于更快,更有效地实现成本函数的全局最小值。权重仍然是随机的,但范围取决于前一层的大小神经元。这提供了受控的初始化,因此更快,更有效的梯度下降。
区别如下
- 激活函数是ReLu的图层,使用 He Normal 初始化效果更好。
- 激活函数是S型(sigmoid)的图层,使用 Xavier初始化效果更好。
感谢:https://medium.com/@prateekvishnu/xavier-and-he-normal-he-et-al-initialization-8e3d7a087528