我想使用Batchnormalization来标准化批处理尺寸,但是自然地,keras中的批处理尺寸没有。那我该怎么办。
keras示例显示conv2d的轴为-1,这表示通道尺寸。
keras.layers.BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True, beta_initializer='zeros', gamma_initializer='ones', moving_mean_initializer='zeros', moving_variance_initializer='ones', beta_regularizer=None, gamma_regularizer=None, beta_constraint=None, gamma_constraint=None)
axis:整数,应归一化的轴(通常是特征轴)。例如,在使用data_format =“ channels_first”的Conv2D图层之后,在BatchNormalization中设置axis = 1。
答案 0 :(得分:1)
将BN层应用于批处理轴根本没有意义。
为什么?如果这是可行的,您将最终根据几个batch_size
维的可训练向量来学习BN参数。好。所以呢。您仍然可以训练这样的模型而不会看到错误消息。
但是测试呢?上述BN仅表示您必须使用与训练中完全相同的batch_size
进行推断。否则,将无法正确定义张量操作,并且会看到错误。
更重要的是,您提出的BN意味着根据批次中的相对位置对样品进行不同的处理。因为您将始终使用一组参数对一批中出现在第一位的样品进行归一化,而对于出现在不同位置的那些样品则使用另一组参数。再说一遍,你可能会这么说。
但是,事实是您无论如何都要洗牌,这意味着批次中的此类相对位置完全没有意义。换句话说,学习有关这些相对位置的东西注定会失败。