Tensorflow/Keras中initializers使用(kernel_initializer/bias_initializer)
在神经网络中,每一层都有两类参数完成网络的传播,即边的权重(layer weights)和偏移权重(bias weights)。在Keras构建每一层的网络的时候需要对层的权重进行初始化。这个初始化通常是在类的build方法中完成的。不同初始化的方式对网络性能的影响不同,在Keras中,提供了initializers.py初始化权重方法。本篇博客主要是说明这个文件的使用。
在Keras定义的神经网络层(Layer)中,必须有build(input_shape)方法,这个方法通过调用父类的super([Layer],self).build()方法,可以设置self.built=True,最终可以在初始化类的时候被调用,进而初始化这个层的权重。一般来说,这些权重都被放到kernel/bias/recurrent_kernel中。我们看一个初始化权重的例子:
from tensorflow.python.keras import initializers
# 在初始化方法中:
kernel_initializer='glorot_uniform'
self.kernel_initializer = initializers.get(kernel_initializer)
# 在build方法中
self.kernel = self.add_weight(
shape=(input_shape[-1], self.units),
name='kernel',
initializer=self.kernel_initializer,
regularizer=self.kernel_regularizer,
constraint=self.kernel_constraint)