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,否则会报错。