当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.compat.v1.layers.BatchNormalization用法及代码示例


来自 (Ioffe et al., 2015) 的批量归一化层。

继承自:BatchNormalizationLayerLayerModule

用法

tf.compat.v1.layers.BatchNormalization(
    axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True,
    beta_initializer=tf.compat.v1.zeros_initializer(),
    gamma_initializer=tf.compat.v1.ones_initializer(),
    moving_mean_initializer=tf.compat.v1.zeros_initializer(),
    moving_variance_initializer=tf.compat.v1.ones_initializer(),
    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
)

参数

  • axis 一个 intint 列表,一个或多个轴应该被规范化,通常是特征轴/轴。例如,在带有 data_format="channels_first"Conv2D 层之后,设置 axis=1 。如果提供了轴列表,则 axis 中的每个轴将同时进行归一化。默认为-1,它使用最后一个轴。注意:当使用 multi-axis 批范数时,beta , gamma , moving_meanmoving_variance 变量与输入张量的等级相同,所有缩减(非轴)维度中的维度大小为 1)。
  • momentum 移动平均线的动量。
  • epsilon 小浮点数添加到方差中以避免除以零。
  • center 如果为 True,则将 beta 的偏移量添加到归一化张量。如果为 False,则忽略 beta
  • scale 如果为真,乘以 gamma 。如果为 False,则不使用 gamma。当下一层是线性的(例如 nn.relu )时,可以禁用此函数,因为缩放可以由下一层完成。
  • beta_initializer Beta 权重的初始化程序。
  • gamma_initializer 伽马权重的初始化器。
  • moving_mean_initializer 移动均值的初始化器。
  • moving_variance_initializer 移动方差的初始化程序。
  • beta_regularizer beta 权重的可选正则化器。
  • gamma_regularizer 伽马权重的可选正则化器。
  • beta_constraint Optimizer 更新后应用于beta 权重的可选投影函数(例如,用于实现层权重的范数约束或值约束)。该函数必须将未投影变量作为输入,并且必须返回投影变量(必须具有相同的形状)。在进行异步分布式训练时使用约束是不安全的。
  • gamma_constraint 在被 Optimizer 更新后,将应用于 gamma 权重的可选投影函数。
  • renorm 是否使用 Batch Renormalization (Ioffe, 2017)。这在训练期间增加了额外的变量。对于此参数的任一值,推断都是相同的。
  • renorm_clipping 可以将键 'rmax'、'rmin'、'dmax' 映射到标量 Tensors 的字典,用于裁剪 renorm 校正。校正 (r, d) 用作 corrected_value = normalized_value * r + dr 被剪裁为 [rmin, rmax],d 被剪裁为 [-dmax, dmax]。缺少的rmax、rmin、dmax分别设置为 inf, 0、 inf,。
  • renorm_momentum 用于使用 renorm 更新移动均值和标准差的动量。与 momentum 不同,这会影响训练,并且既不能太小(会增加噪音)也不能太大(会给出过时的估计)。请注意,momentum 仍用于获取推理的均值和方差。
  • fused 如果 NoneTrue ,请尽可能使用更快的融合实现。如果 False ,使用系统推荐的实现。
  • trainable 布尔值,如果 True 还将变量添加到图形集合 GraphKeys.TRAINABLE_VARIABLES(请参阅 tf.Variable)。
  • virtual_batch_size 一个 int 。默认情况下,virtual_batch_sizeNone ,这意味着在整个批次中执行批次标准化。当 virtual_batch_size 不是 None 时,改为执行“Ghost Batch Normalization”,它会创建虚拟的 sub-batches,每个都分别进行标准化(使用共享的 gamma、beta 和移动统计信息)。执行过程中必须除以实际的batch size。
  • adjustment 一个函数采用包含输入张量的(动态)形状的Tensor 并返回一对(比例,偏差)以应用于归一化值(在 gamma 和 beta 之前),仅在训练期间。例如,如果 axis==-1,adjustment = lambda shape:( tf.random.uniform(shape[-1:], 0.93, 1.07), tf.random.uniform(shape[-1:], -0.1, 0.1)) 会将归一化值向上或向下缩放最多 7%,然后将结果最多移动 0.1(每个特征都有独立的缩放和偏差,但在所有示例中共享) ,最后应用 gamma 和/或 beta。如果 None ,则不应用任何调整。如果指定了virtual_batch_size,则无法指定。
  • name 一个字符串,图层的名称。

属性

  • graph
  • scope_name

迁移到 TF2

警告:这个 API 是为 TensorFlow v1 设计的。继续阅读有关如何从该 API 迁移到本机 TensorFlow v2 等效项的详细信息。见TensorFlow v1 到 TensorFlow v2 迁移指南有关如何迁移其余代码的说明。

此 API 是一个遗留 api,仅与 Eager Execution 和 tf.function 兼容,如果您将其与 tf.compat.v1.keras.utils.track_tf1_style_variables 结合使用

请参阅迁移指南的 tf.layers 模型映射部分,了解如何在 TF2 中将 TensorFlow v1 模型与 Keras 一起使用。

对应的 TensorFlow v2 层是 tf.keras.layers.BatchNormalization

到原生 TF2 的结构映射

支持的参数均未更改名称。

前:

bn = tf.compat.v1.layers.BatchNormalization()

后:

bn = tf.keras.layers.BatchNormalization()

如何映射参数

TF1 参数名称 TF2 参数名称 注意
name name 图层基类
trainable trainable 图层基类
axis axis -
momentum momentum -
epsilon epsilon -
center center -
scale scale -
beta_initializer beta_initializer -
gamma_initializer gamma_initializer -
moving_mean_initializer moving_mean_initializer -
beta_regularizer `beta_regularizer' -
gamma_regularizer `gamma_regularizer' -
beta_constraint `beta_constraint' -
gamma_constraint `gamma_constraint' -
renorm 不支持 -
renorm_clipping 不支持 -
renorm_momentum 不支持 -
fused 不支持 -
virtual_batch_size 不支持 -
adjustment 不支持 -

Keras API 处理 moving_mean 和 moving_variance 的 BatchNormalization 更新,作为其 fit()evaluate() 循环的一部分。但是,如果自定义训练循环与 Model 的实例一起使用,则需要明确包含这些更新。这是一个如何完成的简单示例:

# model is an instance of Model that contains BatchNormalization layer.
  update_ops = model.get_updates_for(None) + model.get_updates_for(features)
  train_op = optimizer.minimize(loss)
  train_op = tf.group([train_op, update_ops])

参考:

Batch Normalization - 通过减少内部协变量偏移来加速深度网络训练:Ioffe 等人,2015 (pdf) Batch Renormalization - Towards Reducing Minibatch Dependence in Batch-Normalized 模型:Ioffe,2017 (pdf)

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.compat.v1.layers.BatchNormalization。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。