标准化 输入/激活函数
tf.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, renorm=False, renorm_clipping=None, renorm_momentum=0.99, fused=None, trainable=True, virtual_batch_size=None, adjustment=None, name=None, **kwargs ) |
将每批前一层的激活量标准化,即进行转换,使平均激活量接近0,激活标准差接近1
批处理规范化在几个关键方面与其他层不同:
- 在训练模式下添加BatchNormalization到模型中,会导致一个example的结果取决于minibatch中的其他example。在填充batches或mask example的时候要小心,因为它们可能会更改minibatch统计信息并影响其他example
- 权重的更新基于模型的前向传递,而不是基于梯度计算的结果。
- 当使用包含批处理归一化的模型执行推理时,通常希望使用累积的统计信息而不是小批量的统计信息。这是通过training=False在调用模型时传递 或使用model.predict来完成的。
参数
axis | 整数,需要规范化的轴(通常是特征轴)。例如,在二维卷积层中,data_format="channels_first",(batch_size, channels,height, width)则在BatchNormalization中设置axis=1 | |
momentum | 平均移动的动量 | |
epsilon | 将小浮点数添加到方差以避免被零除。 | |
center | 若为True,增加偏移beta到规范化张量中,若为否,则忽略beta | |
scale | 如果为True,则乘以gamma。如果为False,gamma则不使用。当下一层是线性的(例如nn.relu)时,可以禁用此功能,因为缩放将由下一层完成。 | |
beta_initializer |
| |
gamma_initializer | gamma权重的初始化 | |
moving_mean_initializer | 移动均值的初始化 | |
moving_variance_initializer | 移动方差的初始化 | |
beta_regularizer | Beta权重的可选正则化器 | |
gamma_regularizer | 伽玛权重的可选正则器 | |
beta_constraint | Beta权重的可选约束 | |
gamma_constraint | gamma权重的可选约束 | |
renorm | 是否使用Batch Renormalization。这在训练过程中增加了额外的变量。此参数的任意值的推断都是相同的。 | |
renorm_clipping | 一个用于将键'rmax', 'rmin', 'dmax'映射到张量的字典,用于附加到renorm校正。校正(r,d)被用作corrected_value = normalized_value * r + d, r 附加到[rmin, rmax], d到[-dmax, dmax]。缺失的rmax, rmin, dmax分别设置为inf, 0, inf。 | |
renorm_momentum | 用于更新移动均值和标准偏差与rennorm,不同于momentum,它会影响训练,既不能太小(会增加噪声)也不能太大。注意momentum仍然用于推断得到均值和方差 | |
fused | 如果True使用,则使用更快的融合实现;如果无法使用融合的实现,则引发ValueError。如果为None,请尽可能使用更快的实现。如果为False,则不要使用融合的实现。 | |
trainable | 布尔值,如果True变量将被标记为可训练的。 | |
virtual_batch_size | int型。默认情况下,virtual_batch_size为None,这意味着在整个批处理中执行批标准化。当virtual_batch_size不是None时,执行“Ghost Batch Normalization”,这将创建每个单独规范化的虚拟子批(使用共享的gamma、beta和移动统计数据)。执行时必须划分实际批大小。 | |
adjustment |
|
调用参数
inputs | 输入张量 |
training | Python布尔值,指示该层是应在训练模式下还是在推理模式下运行。 training=True:该层将使用当前输入批次的均值和方差对输入进行归一化 training=False:该层将使用在训练中学习到的移动统计数据的均值和方差对其输入进行归一化。 |
输入形状:任意。input_shape当将此层用作模型的第一层时,请使用关键字参数(整数元组,不包括样本轴)。输出形状:与输入相同的形状。