【发布时间】:2017-03-14 18:27:35
【问题描述】:
如何设置 Keras 的批量归一化层的权重?
我对文档有点困惑
weights:初始化权重。 2个Numpy数组的列表,形状:[(input_shape,), (input_shape,)] 注意这个列表的顺序是[gamma, beta, mean, std]
我们需要所有四个 [gamma, beta, mean, std] 吗?有没有办法只使用 [gamma, beta] 来设置权重?
【问题讨论】:
如何设置 Keras 的批量归一化层的权重?
我对文档有点困惑
weights:初始化权重。 2个Numpy数组的列表,形状:[(input_shape,), (input_shape,)] 注意这个列表的顺序是[gamma, beta, mean, std]
我们需要所有四个 [gamma, beta, mean, std] 吗?有没有办法只使用 [gamma, beta] 来设置权重?
【问题讨论】:
是的,您需要所有四个值。回想一下批量标准化的作用。它的目标是对进入每一层的输入进行归一化(即均值 = 0 和标准差 = 1)。为此,您需要(mean, std)。因此,归一化的激活可以看作是进行线性变换的子网络的输入:
y = gamma*x_norm + beta
(gamma, beta) 非常重要,因为它们补充了(mean,std),因为(gamma, beta) 有助于从规范化的激活中恢复原始激活。如果您不这样做或更改任何一个参数而不考虑其他参数,则您可能会更改激活的语义含义。现在可以使用下一层处理这些原始激活。对所有层重复此过程。
编辑:
另一方面,我认为值得尝试首先计算大量图像的均值和标准差,并将输入作为您的均值和标准差。请注意,您正在计算的图像均值和标准值来自与训练数据相同的分布。我认为这应该起作用,因为批量标准化通常有两种计算平均值的模式,一种是在批次上保持运行平均值,另一种是全局平均值(至少在 Caffe 中,请参阅here)。
【讨论】:
K.set_value 来实现这一点。
K 是什么?我正在尝试分别设置 gamma、beta、running_mean 和 running_variance 的值。
K 是 Keras 后端。我认为是from keras import backend as K。