阅读(15k) 书签 (0)

TensorFlow函数:tf.layers.batch_normalization

2019-03-07 16:48 更新

tf.layers.batch_normalization函数

tf.layers.batch_normalization(
    inputs,
    axis=-1,
    momentum=0.99,
    epsilon=0.001,
    center=True,
    scale=True,
    beta_initializer=tf.zeros_initializer(),
    gamma_initializer=tf.ones_initializer(),
    moving_mean_initializer=tf.zeros_initializer(),
    moving_variance_initializer=tf.ones_initializer(),
    beta_regularizer=None,
    gamma_regularizer=None,
    beta_constraint=None,
    gamma_constraint=None,
    training=False,
    trainable=True,
    name=None,
    reuse=None,
    renorm=False,
    renorm_clipping=None,
    renorm_momentum=0.99,
    fused=None,
    virtual_batch_size=None,
    adjustment=None
)

定义在:tensorflow/python/layers/normalization.py.

批量规范化层的功能接口.

参考:http://arxiv.org/abs/1502.03167

批量规范化指通过减少内部协变量转换来加速深度网络训练.

注意:训练时,需要更新moving_mean和moving_variance.默认情况下,更新操作被放入tf.GraphKeys.UPDATE_OPS,因此需要将它们作为依赖项添加到train_op.此外,在获取update_ops集合之前,请务必添加任何batch_normalization操作.否则,update_ops将为空,并且训练/推断将无法正常工作.例如:
x_norm = tf.layers.batch_normalization(x, training=training)

# ...

update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
  train_op = optimizer.minimize(loss)

参数:

  • inputs:张量输入.
  • axis:一个int,应该是规范化的轴(通常是特征轴);例如,在使用data_format="channels_first"的Convolution2D图层之后,在BatchNormalization中设置axis=1为.
  • momentum:移动平均线的动量.
  • epsilon:小浮点数添加到方差以避免除以零.
  • center:如果为True,则添加beta到规范化张量的偏移量;如果为False,则忽略beta.
  • scale:如果为True,则乘以gamma;如果为False,则不使用gamma.当下一层是线性的(例如,nn.relu)时,这可以被禁用,因为缩放可以由下一层完成.
  • beta_initializer:beta权重的初始化程序.
  • gamma_initializer:gamma权重的初始化程序.
  • moving_mean_initializer:移动平均值的初始化程序.
  • moving_variance_initializer:移动方差的初始化程序.
  • beta_regularizer:β权量的可选正规化器.
  • gamma_regularizer:gamma权重的可选正规化器.
  • beta_constraint:由Optimizer更新后应用于beta权重的可选投影函数(例如,用于实现层权重的范数约束或值约束).该函数必须将未投影的变量作为输入,并且必须返回投影变量(必须具有相同的形状).在进行异步分布式培训时,使用约束是不安全的.
  • gamma_constraint:由Optimizer更新后应用于gamma权量的可选投影功能.
  • training:可以是Python布尔值或TensorFlow布尔标量张量(例如,占位符);表示是否在训练模式下返回输出(使用当前批次的统计数据进行规范化)或在推理模式下(使用移动统计数据规范化);注意:确保正确设置此参数,否则您的训练/推理将无法正常工作.
  • trainable:Boolean,如果为True,也会将变量添加到图集合GraphKeys.TRAINABLE_VARIABLES中(请参阅tf.Variable).
  • name:String,图层的名称.
  • reuse:Boolean,是否以同一名称重用前一层的权重.
  • renorm:是否使用批量重整化(https://arxiv.org/abs/1702.03275).这会在培训期间增加额外的变量 对于此参数的任一值,推断都是相同的.
  • renorm_clipping:一个字典,可以将键'rmax','rmin','dmax'映射到用于剪辑重新校正的Tensors标量.校正(r, d)被用作corrected_value = normalized_value * r + d,以r限幅为[RMIN,RMAX],和d为[-dmax,DMAX];丢失的rmax,rmin,dmax分别设定为inf,0,inf.
  • renorm_momentum:动量被用于更新移动平均值和标准偏差,使用renorm;不同于momentum,这会影响训练,既不会太小(会增加噪音)也不会太大(这会产生过时的估计);请注意,momentum仍然应用于获取推理的均值和方差.
  • fused:如果为None或者True,则使用更快、更融合的实现;如果为False,请使用系统推荐的实现.
  • virtual_batch_size:一个int,默认情况下,virtual_batch_size是None,这表示在整个批次中执行批量规范化;如果virtual_batch_size不是None,则执行“Ghost Batch Normalization”,创建虚拟子批次,每个子批次分别进行规范化(具有共享的gamma,beta和移动统计数据);必须在执行期间划分实际批量大小.
  • adjustment:一个函数,它包含输入张量(动态)形状的Tensor,并返回一对(scale, bias)以应用于规范化值(在gamma和β之前),仅在训练期间.例如,如果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,则无法指定.

返回:

输出张量.

可能引发的异常:

  • ValueError:如果启用了急切(eager)执行.