如何设置批量归一化层的权重?

Pra*_*nna 5 keras batch-normalization

如何设置 Keras 批量归一化层的权重?

我对文档有点困惑

weights:初始化权重。2 个 Numpy 数组的列表,具有形状:[(input_shape,), (input_shape,)] 注意这个列表的顺序是 [gamma, beta, mean, std]

我们是否需要全部四个 [gamma、beta、mean、std]?有没有办法只使用 [gamma, beta] 来设置权重?

Par*_*kar 4

是的,您需要所有四个值。回忆一下批量归一化的作用。其目标是对进入每一层的输入进行标准化(即平均值 = 0 和标准差 = 1)。为此,您需要(mean, std). 因此,归一化激活可以被视为执行线性变换的子网络的输入:

y = gamma*x_norm + beta
Run Code Online (Sandbox Code Playgroud)

(gamma, beta)非常重要,因为它们(mean,std)在某种意义上是互补的(gamma, beta),有助于从标准化激活中恢复原始激活。如果您不这样做或在不考虑其他参数的情况下更改任何一个参数,则可能会面临更改激活的语义的风险。现在可以使用下一层处理这些原始激活。对所有层重复此过程。

编辑:

另一方面,我认为值得尝试首先计算大量图像的平均值和标准差,并将输入作为平均值和标准差。请注意,您计算平均值和标准差的图像来自与训练数据相同的分布。我认为这应该有效,因为批量归一化通常有两种计算平均值的模式,一种是在批次上维护的运行平均值,另一种是全局平均值(至少在 Caffe 中,请参见此处)。