BN(Batch Normalization)值的计算方法是通过对数据进行标准化来实现的。标准化是指对数据进行平均值为0、标准差为1的处理,以使数据分布更符合标准正态分布。
在计算BN值时,首先计算每个批次的均值和方差,然后将这些均值和方差作为归一化参数,将原始数据减去均值并除以方差,即可计算得到BN值。
具体的计算步骤如下:
1. 对每个批次的数据进行求和,得到批次的总和。
2. 计算每个批次的均值,即将批次的总和除以批次的大小。
3. 计算每个批次的方差,即将每个样本与均值的差的平方求和并除以批次的大小。
4. 将均值和方差作为归一化参数,将原始数据减去均值并除以方差,即可得到BN值。
通过BN值的计算,可以使得数据在输入神经网络之前具有更好的分布特性,有助于提高神经网络的训练速度和性能。
BN的过程,具体是怎样计算均值和方差的?
下来找到部分相关代码如下:( ensorflowpythonlayers ormalization.py)
def call(self, inputs, training=False):
# First, compute the axes along which to reduce the mean / variance,
# as well as the broadcast shape to be used for all parameters.
input_shape = inputs.get_shape()
ndim = len(input_shape)
reduction_axes = list(range(len(input_shape)))
del reduction_axes[self.axis]
broadcast_shape = [1] * len(input_shape)
broadcast_shape[self.axis] = input_shape[self.axis].value
# Determines whether broadcasting is needed.
needs_broadcasting = (sorted(reduction_axes) != list(range(ndim))[:-1])
scale, offset = self.gamma, self.beta