畅游人工智能之海--Keras教程之层权重初始化器

畅游人工智能之海--Keras教程之层权重初始化器(一)

各位读者大家好,今天我们要一起来学习Keras的层权重初始化器。层权重初始化器对神经网络的训练有很重要的作用,好的初始化参数有利于神经网络的训练,可以加快神经网络的收敛速度,并且更可能找到较优解,在某些网络结构中甚至能够提高准确率。那么下面就让我们一起学习吧!

我们先来看看初始化器的用法。它用于将初始值设定项传递给层的关键字参数,通常情况下,它是kernel_initializer和bias_initializer。注意:所有内置的初始化程序也可以通过其字符串标识符传递。

1
2
3
4
5
6
7
8
9
10
from tensorflow.keras import layers
from tensorflow.keras import initializers

layer = layers.Dense(
units=64,
#也可以是kernel_initializer='random_normal'
kernel_initializer=initializers.RandomNormal(stddev=0.01),
#也可以是bias_initializer='zeros'
bias_initializer=initializers.Zeros()
)
RandomNormal类
1
2
3
4
5
tf.keras.initializers.RandomNormal(
mean=0.0, #标量或标量张量。要生成的随机值的平均值。
stddev=0.05, #标量或标量张量。要生成的随机值的标准偏差。
seed=None #整数。使用给定种子创建的初始化器将始终为给定的形状和dtype产生相同的随机张量。
)

作用:

初始化器,生成具有正态分布的张量。均值为mean,标准差为stddev

也可以通过快捷功能使用:tf.keras.initializers.random_normal

例子:

1
2
initializer = tf.keras.initializers.RandomNormal(mean=0., stddev=1.)
layer=tf.keras.layers.Dense(3,kernel_initializer=initializer)
RandomUniform类
1
2
3
4
5
tf.keras.initializers.RandomUniform(
minval=-0.05, #标量或标量张量。要生成的随机值范围的下限(包括)。
maxval=0.05, #标量或标量张量。要生成的随机值范围的上限(不包括)。
seed=None #整数。使用给定种子创建的初始化器将始终为给定的形状和dtype产生相同的随机张量。
)

作用:

初始化器,生成具有正态分布的张量。

例子:

1
2
initializer = tf.keras.initializers.RandomUniform(minval=0., maxval=1.)
layer=tf.keras.layers.Dense(3,kernel_initializer=initializer)
TruncatedNormal类
1
2
3
4
5
tf.keras.initializers.TruncatedNormal(
mean=0.0, #标量或标量张量。要生成的随机值的平均值。
stddev=0.05, #标量或标量张量。要生成的随机值的标准偏差。
seed=None #整数。使用给定种子创建的初始化器将始终为给定的形状和dtype产生相同的随机张量。
)

作用:

初始化器,生成截断的具有正态分布的张量。

也可以通过快捷功能使用 tf.keras.initializers.truncated_normal

生成的值与tf.keras.initializers.RandomNormal初始值设定项的值相似, 不同的是将丢弃与均值两个以上标准差的值并重新绘制。

例子:

1
2
initializer = tf.keras.initializers.TruncatedNormal(mean=0., stddev=1.)
layer=tf.keras.layers.Dense(3,kernel_initializer=initializer)
Zeros类
1
tf.keras.initializers.Zeros()

作用:

生成张量初始化为0的初始化程序。

也可以通过快捷功能使用tf.keras.initializers.zeros

例子:

1
2
initializer = tf.keras.initializers.Zeros()
layer=tf.keras.layers.Dense(3,kernel_initializer=initializer)
Ones类
1
tf.keras.initializers.Ones()

作用:

生成张量初始化为1的初始化程序。

也可以通过快捷功能使用tf.keras.initializers.ones

例子:

1
2
initializer = tf.keras.initializers.Ones()
layer=tf.keras.layers.Dense(3,kernel_initializer=initializer)
GlorotNormal类
1
2
3
tf.keras.initializers.GlorotNormal(
seed=None #整数。使用给定种子创建的初始化器将始终为给定的形状和dtype产生相同的随机张量。
)

作用:

Glorot普通初始化器,也称为Xavier普通初始化器。

也可以通过快捷功能使用 tf.keras.initializers.glorot_normal

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

例子:

1
2
initializer = tf.keras.initializers.GlorotNormal()
layer=tf.keras.layers.Dense(3,kernel_initializer=initializer)
GlorotUniform类
1
tf.keras.initializers.GlorotUniform(seed=None)

作用:

Glorot统一初始化器,也称为Xavier统一初始化器。

也可以通过快捷功能使用 tf.keras.initializers.glorot_uniform

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

例子:

1
2
initializer = tf.keras.initializers.GlorotUniform()
layer=tf.keras.layers.Dense(3,kernel_initializer=initializer)

层的权重初始化器有非常多的类型,我们要一一掌握。好的初始值是加快训练速度甚至提高准确率的重要因素,所以希望大家能自己再多查阅相关的资料,看看层权重初始化时的门道,与文章中的内容结合,才能事半功倍。我们下周将继续开展相关内容的介绍,谢谢大家!