View source on GitHub |
Batch normalization.
tf.nn.batch_normalization(
x, mean, variance, offset, scale, variance_epsilon, name=None
)
Normalizes a tensor by mean
and variance
, and applies (optionally) a
scale
\(\gamma\) to it, as well as an offset
\(\beta\):
\(\frac{\gamma(x-\mu)}{\sigma}+\beta\)
mean
, variance
, offset
and scale
are all expected to be of one of two
shapes:
x
, with identical sizes as x
for the dimensions that are not
normalized over (the 'depth' dimension(s)), and dimension 1 for the
others which are being normalized over.
mean
and variance
in this case would typically be the outputs of
tf.nn.moments(..., keepdims=True)
during training, or running averages
thereof during inference.x
, they may be one dimensional tensors of the same
size as the 'depth' dimension.
This is the case for example for the common [batch, depth]
layout of
fully-connected layers, and [batch, height, width, depth]
for
convolutions.
mean
and variance
in this case would typically be the outputs of
tf.nn.moments(..., keepdims=False)
during training, or running averages
thereof during inference.See equation 11 in Algorithm 2 of source: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift; S. Ioffe, C. Szegedy.
x
: Input Tensor
of arbitrary dimensionality.mean
: A mean Tensor
.variance
: A variance Tensor
.offset
: An offset Tensor
, often denoted \(\beta\) in equations, or
None. If present, will be added to the normalized tensor.scale
: A scale Tensor
, often denoted \(\gamma\) in equations, or
None
. If present, the scale is applied to the normalized tensor.variance_epsilon
: A small float number to avoid dividing by 0.name
: A name for this operation (optional).Normalized, scaled, offset tensor.