初始化器定义了设置 Keras 层初始随机权重的方式。
用于将初始化器传递到层的关键字参数取决于层。通常,它只是 kernel_initializer
和 bias_initializer
from keras import layers
from keras import initializers
layer = layers.Dense(
units=64,
kernel_initializer=initializers.RandomNormal(stddev=0.01),
bias_initializer=initializers.Zeros()
)
所有内置初始化器也可以通过其字符串标识符传递
layer = layers.Dense(
units=64,
kernel_initializer='random_normal',
bias_initializer='zeros'
)
以下内置初始化器作为 keras.initializers
模块的一部分提供
RandomNormal
类keras.initializers.RandomNormal(mean=0.0, stddev=0.05, seed=None)
随机正态分布初始化器。
根据给定参数从正态分布中抽取样本。
示例
>>> # Standalone usage:
>>> initializer = RandomNormal(mean=0.0, stddev=1.0)
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = RandomNormal(mean=0.0, stddev=1.0)
>>> layer = Dense(3, kernel_initializer=initializer)
参数
keras.backend.SeedGenerator
的实例。用于使初始化器的行为确定性。请注意,使用整数或 None
(无种子)作为种子的初始化器将在多次调用中产生相同的随机值。若要在多次调用中获得不同的随机值,请使用 keras.backend.SeedGenerator
的实例作为种子。RandomUniform
类keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None)
随机均匀分布初始化器。
根据给定参数从均匀分布中抽取样本。
示例
>>> # Standalone usage:
>>> initializer = RandomUniform(minval=0.0, maxval=1.0)
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = RandomUniform(minval=0.0, maxval=1.0)
>>> layer = Dense(3, kernel_initializer=initializer)
参数
keras.backend.SeedGenerator
的实例。用于使初始化器的行为确定性。请注意,使用整数或 None
(无种子)作为种子的初始化器将在多次调用中产生相同的随机值。若要在多次调用中获得不同的随机值,请使用 keras.backend.SeedGenerator
的实例作为种子。TruncatedNormal
类keras.initializers.TruncatedNormal(mean=0.0, stddev=0.05, seed=None)
生成截断正态分布的初始化器。
生成的数值类似于来自 RandomNormal
初始化器的数值,除了超过均值两个标准差的数值将被丢弃并重新绘制。
示例
>>> # Standalone usage:
>>> initializer = TruncatedNormal(mean=0., stddev=1.)
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = TruncatedNormal(mean=0., stddev=1.)
>>> layer = Dense(3, kernel_initializer=initializer)
参数
keras.backend.SeedGenerator
的实例。用于使初始化器的行为确定性。请注意,使用整数或 None
(无种子)作为种子的初始化器将在多次调用中产生相同的随机值。若要在多次调用中获得不同的随机值,请使用 keras.backend.SeedGenerator
的实例作为种子。Zeros
类keras.initializers.Zeros()
生成初始化为 0 的张量的初始化器。
示例
>>> # Standalone usage:
>>> initializer = Zeros()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = Zeros()
>>> layer = Dense(units=3, kernel_initializer=initializer)
Ones
类keras.initializers.Ones()
生成初始化为 1 的张量的初始化器。
也可以通过快捷函数 ones
使用。
示例
>>> # Standalone usage:
>>> initializer = Ones()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = Ones()
>>> layer = Dense(3, kernel_initializer=initializer)
GlorotNormal
类keras.initializers.GlorotNormal(seed=None)
Glorot 正态分布初始化器,也称为 Xavier 正态分布初始化器。
从以 0 为中心的截断正态分布中抽取样本,其中 stddev = sqrt(2 / (fan_in + fan_out))
,其中 fan_in
是权重张量中输入单元的数量,fan_out
是权重张量中输出单元的数量。
示例
>>> # Standalone usage:
>>> initializer = GlorotNormal()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = GlorotNormal()
>>> layer = Dense(3, kernel_initializer=initializer)
参数
keras.backend.SeedGenerator
的实例。用于使初始化器的行为确定性。请注意,使用整数或 None
(无种子)作为种子的初始化器将在多次调用中产生相同的随机值。若要在多次调用中获得不同的随机值,请使用 keras.backend.SeedGenerator
的实例作为种子。参考文献
GlorotUniform
类keras.initializers.GlorotUniform(seed=None)
Glorot 均匀分布初始化器,也称为 Xavier 均匀分布初始化器。
从 [-limit, limit]
内的均匀分布中抽取样本,其中 limit = sqrt(6 / (fan_in + fan_out))
(fan_in
是权重张量中输入单元的数量,fan_out
是输出单元的数量)。
示例
>>> # Standalone usage:
>>> initializer = GlorotUniform()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = GlorotUniform()
>>> layer = Dense(3, kernel_initializer=initializer)
参数
keras.backend.SeedGenerator
的实例。用于使初始化器的行为确定性。请注意,使用整数或 None
(无种子)作为种子的初始化器将在多次调用中产生相同的随机值。若要在多次调用中获得不同的随机值,请使用 keras.backend.SeedGenerator
的实例作为种子。参考文献
HeNormal
类keras.initializers.HeNormal(seed=None)
He 正态分布初始化器。
它从以 0 为中心的截断正态分布中抽取样本,其中 stddev = sqrt(2 / fan_in)
,其中 fan_in
是权重张量中输入单元的数量。
示例
>>> # Standalone usage:
>>> initializer = HeNormal()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = HeNormal()
>>> layer = Dense(3, kernel_initializer=initializer)
参数
keras.backend.SeedGenerator
的实例。用于使初始化器的行为确定性。请注意,使用整数或 None
(无种子)作为种子的初始化器将在多次调用中产生相同的随机值。若要在多次调用中获得不同的随机值,请使用 keras.backend.SeedGenerator
的实例作为种子。参考文献
HeUniform
类keras.initializers.HeUniform(seed=None)
He 均匀方差缩放初始化器。
从 [-limit, limit]
内的均匀分布中抽取样本,其中 limit = sqrt(6 / fan_in)
(fan_in
是权重张量中输入单元的数量)。
示例
>>> # Standalone usage:
>>> initializer = HeUniform()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = HeUniform()
>>> layer = Dense(3, kernel_initializer=initializer)
参数
keras.backend.SeedGenerator
的实例。用于使初始化器的行为确定性。请注意,使用整数或 None
(无种子)作为种子的初始化器将在多次调用中产生相同的随机值。若要在多次调用中获得不同的随机值,请使用 keras.backend.SeedGenerator
的实例作为种子。参考文献
Orthogonal
类keras.initializers.Orthogonal(gain=1.0, seed=None)
生成正交矩阵的初始化器。
如果要初始化的张量的形状是二维的,则使用从正态分布中抽取的随机数矩阵的 QR 分解获得的正交矩阵对其进行初始化。如果矩阵的行数少于列数,则输出将具有正交行。否则,输出将具有正交列。
如果要初始化的张量的形状超过二维,则初始化形状为 (shape[0] * ... * shape[n - 2], shape[n - 1])
的矩阵,其中 n
是形状向量的长度。随后将矩阵重新整形以给出所需形状的张量。
示例
>>> # Standalone usage:
>>> initializer = keras.initializers.Orthogonal()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = keras.initializers.Orthogonal()
>>> layer = keras.layers.Dense(3, kernel_initializer=initializer)
参数
参考文献
Constant
类keras.initializers.Constant(value=0.0)
生成具有常数值的张量的初始化器。
仅允许标量值。提供的常数值必须可转换为调用初始化器时请求的数据类型。
示例
>>> # Standalone usage:
>>> initializer = Constant(10.)
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = Constant(10.)
>>> layer = Dense(3, kernel_initializer=initializer)
参数
VarianceScaling
类keras.initializers.VarianceScaling(
scale=1.0, mode="fan_in", distribution="truncated_normal", seed=None
)
其比例适应其输入张量形状的初始化器。
使用 distribution="truncated_normal" or "untruncated_normal"
,从均值为零且标准差(如果使用则在截断后)为 stddev = sqrt(scale / n)
的截断/非截断正态分布中抽取样本,其中 n
是
mode="fan_in"
,则为权重张量中输入单元的数量mode="fan_out"
,则为输出单元的数量mode="fan_avg"
,则为输入和输出单元数量的平均值使用 distribution="uniform"
,从 [-limit, limit]
内的均匀分布中抽取样本,其中 limit = sqrt(3 * scale / n)
。
示例
>>> # Standalone usage:
>>> initializer = VarianceScaling(
scale=0.1, mode='fan_in', distribution='uniform')
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = VarianceScaling(
scale=0.1, mode='fan_in', distribution='uniform')
>>> layer = Dense(3, kernel_initializer=initializer)
参数
"fan_in"
、"fan_out"
、"fan_avg"
之一。"truncated_normal"
、"untruncated_normal"
或 "uniform"
之一。keras.backend.SeedGenerator
的实例。用于使初始化器的行为确定性。请注意,使用整数或 None
(无种子)作为种子的初始化器将在多次调用中产生相同的随机值。若要在多次调用中获得不同的随机值,请使用 keras.backend.SeedGenerator
的实例作为种子。LecunNormal
类keras.initializers.LecunNormal(seed=None)
Lecun 正态分布初始化器。
初始化器允许您预先指定初始化策略(编码在 Initializer 对象中),而无需了解正在初始化的变量的形状和数据类型。
从以 0 为中心的截断正态分布中抽取样本,其中 stddev = sqrt(1 / fan_in)
,其中 fan_in
是权重张量中输入单元的数量。
示例
>>> # Standalone usage:
>>> initializer = LecunNormal()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = LecunNormal()
>>> layer = Dense(3, kernel_initializer=initializer)
参数
keras.backend.SeedGenerator
的实例。用于使初始化器的行为确定性。请注意,使用整数或 None
(无种子)作为种子的初始化器将在多次调用中产生相同的随机值。若要在多次调用中获得不同的随机值,请使用 keras.backend.SeedGenerator
的实例作为种子。参考文献
LecunUniform
类keras.initializers.LecunUniform(seed=None)
Lecun 均匀分布初始化器。
从 [-limit, limit]
内的均匀分布中抽取样本,其中 limit = sqrt(3 / fan_in)
(fan_in
是权重张量中输入单元的数量)。
示例
>>> # Standalone usage:
>>> initializer = LecunUniform()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = LecunUniform()
>>> layer = Dense(3, kernel_initializer=initializer)
参数
keras.backend.SeedGenerator
的实例。用于使初始化器的行为确定性。请注意,使用整数或 None
(无种子)作为种子的初始化器将在多次调用中产生相同的随机值。若要在多次调用中获得不同的随机值,请使用 keras.backend.SeedGenerator
的实例作为种子。参考文献
Identity
类keras.initializers.IdentityInitializer(gain=1.0)
生成单位矩阵的初始化器。
仅可用于生成二维矩阵。
示例
>>> # Standalone usage:
>>> initializer = Identity()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = Identity()
>>> layer = Dense(3, kernel_initializer=initializer)
参数
您可以将自定义可调用对象作为初始化器传递。它必须接受参数 shape
(要初始化的变量的形状)和 dtype
(生成值的类型)。
def my_init(shape, dtype=None):
return keras.random.normal(shape, dtype=dtype)
layer = Dense(64, kernel_initializer=my_init)
Initializer
子类如果您需要通过各种参数(例如 RandomNormal
中的 stddev
参数)配置初始化器,则应将其实现为 keras.initializers.Initializer
的子类。
初始化器应实现一个具有以下签名的 __call__
方法
def __call__(self, shape, dtype=None)`:
# returns a tensor of shape `shape` and dtype `dtype`
# containing values drawn from a distribution of your choice.
可选地,您还可以实现 get_config
方法和类方法 from_config
以支持序列化——就像任何 Keras 对象一样。
这是一个简单的示例:随机正态分布初始化器。
class ExampleRandomNormal(keras.initializers.Initializer):
def __init__(self, mean, stddev):
self.mean = mean
self.stddev = stddev
def __call__(self, shape, dtype=None)`:
return keras.random.normal(
shape, mean=self.mean, stddev=self.stddev, dtype=dtype)
def get_config(self): # To support serialization
return {'mean': self.mean, 'stddev': self.stddev}
请注意,在上面的示例中,我们不必实现 from_config
,因为类的构造函数参数与 get_config
返回的配置中的键相同。在这种情况下,默认的 from_config
可以正常工作。