Keras学习笔记12——keras.initializers

初始化器的用法

初始化定义了设置 Keras 各层权重随机初始值的方法。
用来将初始化器传入 Keras 层的参数名取决于具体的层。通常关键字为 kernel_initializer 和 bias_initializer:

model.add(Dense(64,
                kernel_initializer='random_uniform',
                bias_initializer='zeros'))

一个初始化器可以作为一个字符串传递(必须匹配上面的一个可用的初始化器),或者作为一个可调用函数传递

from keras import initializers
# 可调用函数传递
model.add(Dense(64, kernel_initializer=initializers.random_normal(stddev=0.01)))

# 字符串传递,同样有效;将使用默认参数。
model.add(Dense(64, kernel_initializer='random_normal'))

可用的初始化器

下面这些是可用的内置初始化器,是 keras.initializers 模块的一部分:

Initializer

keras.initializers.Initializer()

初始化器基类:所有初始化器继承这个类。

Zeros

keras.initializers.Zeros()

将张量初始值设为 0 的初始化器。

Ones

keras.initializers.Ones()

将张量初始值设为 1 的初始化器。

Constant

keras.initializers.Constant(value=0)

将张量初始值设为一个常数的初始化器。

参数
value: 浮点数,生成的张量的值。

RandomNormal

按照正态分布生成随机张量的初始化器。

keras.initializers.RandomNormal(mean=0.0, stddev=0.05, seed=None)

参数

  • mean: 一个 Python 标量或者一个标量张量。要生成的随机值的平均数。
  • stddev: 一个 Python 标量或者一个标量张量。要生成的随机值的标准差。
  • seed: 一个 Python 整数。用于设置随机数种子。

RandomUniform

按照均匀分布生成随机张量的初始化器。

keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None)

参数

  • minval: 一个 Python 标量或者一个标量张量。要生成的随机值的范围下限。
  • maxval: 一个 Python 标量或者一个标量张量。要生成的随机值的范围下限。默认为浮点类型的 1。
  • seed: 一个 Python 整数。用于设置随机数种子。

TruncatedNormal

按照截尾正态分布生成随机张量的初始化器。

keras.initializers.TruncatedNormal(mean=0.0, stddev=0.05, seed=None)

生成的随机值与 RandomNormal 生成的类似,但是在距离平均值两个标准差之外的随机值将被丢弃并重新生成。这是用来生成神经网络权重和滤波器的推荐初始化器。

参数:

  • mean: 一个 Python 标量或者一个标量张量。要生成的随机值的平均数。
  • stddev: 一个 Python 标量或者一个标量张量。要生成的随机值的标准差。
  • seed: 一个 Python 整数。用于设置随机数种子。

VarianceScaling

初始化器能够根据权值的尺寸调整其规模。

keras.initializers.VarianceScaling(scale=1.0, mode='fan_in', 
distribution='normal', seed=None)

参数

  • scale: 缩放因子(正浮点数)。
  • distribution: 使用的随机分布。“normal”, “uniform” 之一。
    • 使用 distribution=“normal” 时,样本是从一个以 0 为中心的截断正态分布中抽取的,stddev = sqrt(scale / n)
    • 使用 distribution=“uniform” 时,样本是从 [-limit,limit] 内的均匀分布中抽取的,其中 limit = sqrt(3 * scale / n)
  • mode: “fan_in”, “fan_out”, “fan_avg” 之一。
    • n = 权值张量中输入单元的数量,如果 mode = “fan_in”。
    • n = 输出单元的数量,如果 mode = “fan_out”。
    • n = 输入和输出单位数量的平均数,如果 mode = “fan_avg”。
  • seed: 一个 Python 整数。作为随机发生器的种子。

Orthogonal

生成一个随机正交矩阵的初始化器。

keras.initializers.Orthogonal(gain=1.0, seed=None)

参数

  • gain: 适用于正交矩阵的乘法因子。
  • seed: 一个 Python 整数。作为随机发生器的种子。

Identity

生成单位矩阵的初始化器。仅用于 2D 方阵

keras.initializers.Identity(gain=1.0)

参数:
gain: 适用于单位矩阵的乘法因子。

lecun_uniform

LeCun 均匀初始化器。

keras.initializers.lecun_uniform(seed=None)

它从 [-limit,limit] 中的均匀分布中抽取样本, 其中 limit 是 sqrt(3 / fan_in), fan_in 是权值张量中的输入单位的数量。

参数
seed: 一个 Python 整数。作为随机发生器的种子。

返回
一个初始化器。

lecun_normal

LeCun 正态分布初始化器。

keras.initializers.lecun_normal(seed=None)

它从以 0 为中心,标准差为 stddev = sqrt(1 / fan_in) 的截断正态分布中抽取样本, 其中 fan_in 是权值张量中的输入单位的数量。

参数
seed: 一个 Python 整数。作为随机发生器的种子。

返回
一个初始化器。

glorot_normal

Glorot 正态分布初始化器,也称为 Xavier 正态分布初始化器

keras.initializers.glorot_normal(seed=None)

它从以 0 为中心,标准差为 stddev = sqrt(2 / (fan_in + fan_out)) 的截断正态分布中抽取样本, 其中 fan_in 是权值张量中的输入单位的数量, fan_out 是权值张量中的输出单位的数量。

参数
seed: 一个 Python 整数。作为随机发生器的种子。

返回
一个初始化器。

glorot_uniform

Glorot 均匀分布初始化器,也称为 Xavier 均匀分布初始化器。

keras.initializers.glorot_uniform(seed=None)

它从 [-limit,limit] 中的均匀分布中抽取样本, 其中 limit 是 sqrt(6 / (fan_in + fan_out)), fan_in 是权值张量中的输入单位的数量, fan_out 是权值张量中的输出单位的数量。

参数
seed: 一个 Python 整数。作为随机发生器的种子。

返回
一个初始化器。

he_normal

He 正态分布初始化器。

keras.initializers.he_normal(seed=None)

它从以 0 为中心,标准差为 stddev = sqrt(2 / fan_in) 的截断正态分布中抽取样本, 其中 fan_in 是权值张量中的输入单位的数量,

参数
seed: 一个 Python 整数。作为随机发生器的种子。

返回
一个初始化器。

he_uniform

He 均匀方差缩放初始化器。

keras.initializers.he_uniform(seed=None)

它从 [-limit,limit] 中的均匀分布中抽取样本, 其中 limit 是 sqrt(6 / fan_in), 其中 fan_in 是权值张量中的输入单位的数量。

参数
seed: 一个 Python 整数。作为随机发生器的种子。

返回
一个初始化器。

使用自定义初始化器

如果传递一个自定义的可调用函数,那么它必须使用参数 shape(需要初始化的变量的尺寸)和 dtype(数据类型):

from keras import backend as K

def my_init(shape, dtype=None):
    return K.random_normal(shape, dtype=dtype)

model.add(Dense(64, kernel_initializer=my_init))
  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值