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)执行.