|
|
|
@ -1489,8 +1489,7 @@ def batch_norm(input,
|
|
|
|
|
name=None,
|
|
|
|
|
moving_mean_name=None,
|
|
|
|
|
moving_variance_name=None,
|
|
|
|
|
average_mean=True,
|
|
|
|
|
average_variance=True):
|
|
|
|
|
do_model_average_for_mean_and_var=False):
|
|
|
|
|
"""
|
|
|
|
|
This function helps create an operator to implement
|
|
|
|
|
the BatchNorm layer using the configurations from the input parameters.
|
|
|
|
@ -1519,12 +1518,15 @@ def batch_norm(input,
|
|
|
|
|
bias = helper.create_parameter(
|
|
|
|
|
attr=helper.bias_attr, shape=param_shape, dtype=dtype, is_bias=True)
|
|
|
|
|
|
|
|
|
|
if do_model_average_for_mean_and_var:
|
|
|
|
|
do_model_average_for_mean_and_var = None
|
|
|
|
|
|
|
|
|
|
mean = helper.create_parameter(
|
|
|
|
|
attr=ParamAttr(
|
|
|
|
|
name=moving_mean_name,
|
|
|
|
|
initializer=Constant(0.0),
|
|
|
|
|
trainable=False,
|
|
|
|
|
average=average_variance),
|
|
|
|
|
do_model_average=do_model_average_for_mean_and_var),
|
|
|
|
|
shape=param_shape,
|
|
|
|
|
dtype=input.dtype)
|
|
|
|
|
mean.stop_gradient = True
|
|
|
|
@ -1534,7 +1536,7 @@ def batch_norm(input,
|
|
|
|
|
name=moving_variance_name,
|
|
|
|
|
initializer=Constant(1.0),
|
|
|
|
|
trainable=False,
|
|
|
|
|
average=average_mean),
|
|
|
|
|
do_model_average=do_model_average_for_mean_and_var),
|
|
|
|
|
shape=param_shape,
|
|
|
|
|
dtype=input.dtype)
|
|
|
|
|
variance.stop_gradient = True
|
|
|
|
|