用来将初始化器传入 Keras 层的参数名取决于具体的层。通常关键字为 和 bias_initializer
:
下面这些是可用的内置初始化器,是 keras.initializers
模块的一部分:
keras.initializers.Initializer()
初始化器基类:所有初始化器继承这个类。
Zeros
keras.initializers.Zeros()
将张量初始值设为 0 的初始化器。
Ones
keras.initializers.Ones()
将张量初始值设为1的初始化器。
Constant
keras.initializers.Constant(value=0)
将张量初始值设为一个常数的初始化器。
参数
RandomNormal
keras.initializers.RandomNormal(mean=0.0, stddev=0.05, seed=None)
按照正态分布生成随机张量的初始化器。
参数
- mean: 一个 Python 标量或者一个标量张量。要生成的随机值的平均数。
- stddev: 一个 Python 标量或者一个标量张量。要生成的随机值的标准差。
- seed: 一个 Python 整数。用于设置随机数种子。
按照均匀分布生成随机张量的初始化器。
参数
- minval: 一个 Python 标量或者一个标量张量。要生成的随机值的范围下限。
- maxval: 一个 Python 标量或者一个标量张量。要生成的随机值的范围下限。默认为浮点类型的 1。
- seed: 一个 Python 整数。用于设置随机数种子。
TruncatedNormal
keras.initializers.TruncatedNormal(mean=0.0, stddev=0.05, seed=None)
按照截尾正态分布生成随机张量的初始化器。
生成的随机值与 RandomNormal
生成的类似,但是在距离平均值两个标准差之外的随机值将被丢弃并重新生成。这是用来生成神经网络权重和滤波器的推荐初始化器。
Arguments
- mean: 一个 Python 标量或者一个标量张量。要生成的随机值的平均数。
- stddev: 一个 Python 标量或者一个标量张量。要生成的随机值的标准差。
- seed: 一个 Python 整数。用于设置随机数种子。
VarianceScaling
keras.initializers.VarianceScaling(scale=1.0, mode='fan_in', distribution='normal', seed=None)
初始化器能够根据权值的尺寸调整其规模。
使用 distribution="normal"
时,样本是从一个以 0 为中心的截断正态分布中抽取的,stddev = sqrt(scale / n)
,其中 n 是:
- 权值张量中输入单元的数量,如果 mode = “fan_in”。
- 输出单元的数量,如果 mode = “fan_out”。
- 输入和输出单位数量的平均数,如果 mode = “fan_avg”。
使用 distribution="uniform"
时,样本是从 [-limit,limit] 内的均匀分布中抽取的,其中 limit = sqrt(3 * scale / n)
。
- scale: 缩放因子(正浮点数)。
- mode: “fan_in”, “fan_out”, “fan_avg” 之一。
- distribution: 使用的随机分布。”normal”, “uniform” 之一。
- seed: 一个 Python 整数。作为随机发生器的种子。
异常
- ValueError: 如果 “scale”, mode” 或 “distribution” 参数无效。
Orthogonal
生成一个随机正交矩阵的初始化器。
参数
- gain: 适用于正交矩阵的乘法因子。
参考文献
Saxe et al.,
Identity
keras.initializers.Identity(gain=1.0)
生成单位矩阵的初始化器。
仅用于 2D 方阵。
参数
- gain: 适用于单位矩阵的乘法因子。
lecun_uniform(seed=None)
LeCun 均匀初始化器。
它从 [-limit,limit] 中的均匀分布中抽取样本,
其中 limit
是 sqrt(3 / fan_in)
,fan_in
是权值张量中的输入单位的数量。
Arguments
- seed: 一个 Python 整数。作为随机发生器的种子。
Returns
一个初始化器。
参考文献
LeCun 98, Efficient Backprop,
- http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf
glorot_normal
Glorot 正态分布初始化器,也称为 Xavier 正态分布初始化器。
它从以 0 为中心,标准差为 stddev = sqrt(2 / (fan_in + fan_out))
的截断正态分布中抽取样本,
其中 fan_in
是权值张量中的输入单位的数量,fan_out
是权值张量中的输出单位的数量。
Arguments
- seed: 一个 Python 整数。作为随机发生器的种子。
Returns
一个初始化器。
参考文献
Glorot & Bengio, AISTATS 2010
- http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf
glorot_uniform
glorot_uniform(seed=None)
Glorot 均匀分布初始化器,也称为 Xavier 均匀分布初始化器。
参数
- seed: 一个 Python 整数。作为随机发生器的种子。
返回
一个初始化器。
参考文献
Glorot & Bengio, AISTATS 2010
- http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf
he_normal
he_normal(seed=None)
He 正态分布初始化器。
它从以 0 为中心,标准差为 的截断正态分布中抽取样本,
其中 fan_in
是权值张量中的输入单位的数量,
参数
- seed: 一个 Python 整数。作为随机发生器的种子。
返回
一个初始化器。
参考文献
He et al.,
lecun_normal
lecun_normal(seed=None)
LeCun 正态分布初始化器。
它从以 0 为中心,标准差为 stddev = sqrt(1 / fan_in)
的截断正态分布中抽取样本,
其中 fan_in
是权值张量中的输入单位的数量。
参数
- seed: 一个 Python 整数。作为随机发生器的种子。
返回
一个初始化器。
参考文献
he_uniform(seed=None)
He 均匀方差缩放初始化器。
它从 [-limit,limit] 中的均匀分布中抽取样本,
其中 limit
是 sqrt(6 / fan_in)
,
其中 fan_in
是权值张量中的输入单位的数量。
参数
- seed: 一个 Python 整数。作为随机发生器的种子。
返回
一个初始化器。
参考文献
He et al.,
from keras import initializers
model.add(Dense(64, kernel_initializer=initializers.random_normal(stddev=0.01)))
model.add(Dense(64, kernel_initializer='random_normal'))
如果传递一个自定义的可调用函数,那么它必须使用参数 (需要初始化的变量的尺寸)和 dtype
(数据类型):