keras权重初始化方法()

在神经网络训练中,好的权重 初始化会加速训练过程。

下面说一下kernel_initializer 权重初始化的方法。

不同的层可能使用不同的关键字来传递初始化方法,一般来说指定初始化方法的关键字是kernel_initializer 和 bias_initializer

model.add(Dense(64, kernel_initializer=initializers.random_normal(stddev=0.01)))
 
# also works; will use the default parameters.
model.add(Dense(64, kernel_initializer='random_normal'))

几种初始化方法

keras.initializers.Zeros()  # 全0
keras.initializers.Ones()  # 全1
keras.initializers.RandomNormal(mean=0.0, stddev=0.05, seed=None))  # 指定均值和方差的正态分布初始化
keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None)  # 指定下边界和上边界的均匀分布初始化
keras.initializers.TruncatedNormal(mean=0.0, stddev=0.05, seed=None)  # 截尾高斯分布初始化,位于均值两个标准差以外的数据将会被丢弃并重新生成,形成截尾分布

自定义初始化

def my_init(shape, dtype=None):
     return K.random_normal(shape, dtype=dtype)
    
model.add(Dense(64, kernel_initializer=my_init))

使用自定义的kernel_initializer后,保存,加载模型使用save_weights,load_weights,不要用save_model, load_model,否则会报错。

————————

在神经网络训练中,好的权重 初始化会加速训练过程。

下面说一下kernel_initializer 权重初始化的方法。

不同的层可能使用不同的关键字来传递初始化方法,一般来说指定初始化方法的关键字是kernel_initializer 和 bias_initializer

model.add(Dense(64, kernel_initializer=initializers.random_normal(stddev=0.01)))
 
# also works; will use the default parameters.
model.add(Dense(64, kernel_initializer='random_normal'))

几种初始化方法

keras.initializers.Zeros()  # 全0
keras.initializers.Ones()  # 全1
keras.initializers.RandomNormal(mean=0.0, stddev=0.05, seed=None))  # 指定均值和方差的正态分布初始化
keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None)  # 指定下边界和上边界的均匀分布初始化
keras.initializers.TruncatedNormal(mean=0.0, stddev=0.05, seed=None)  # 截尾高斯分布初始化,位于均值两个标准差以外的数据将会被丢弃并重新生成,形成截尾分布

自定义初始化

def my_init(shape, dtype=None):
     return K.random_normal(shape, dtype=dtype)
    
model.add(Dense(64, kernel_initializer=my_init))

使用自定义的kernel_initializer后,保存,加载模型使用save_weights,load_weights,不要用save_model, load_model,否则会报错。