有人能解释tf.keras.layers.BatchNormalization的行为吗?

2024-09-30 14:31:57 发布

您现在位置:Python中文网/ 问答频道 /正文

从tensorflow文档中:

https://www.tensorflow.org/api_docs/python/tf/keras/layers/BatchNormalization

“规范化每批前一层的激活,即应用转换,使平均激活接近0,激活标准偏差接近1。”

因此,我希望该层首先计算前一层输出的平均值和标准偏差,减去平均值,再除以批次中每个样品的标准偏差。但显然我错了

import numpy as np
import tensorflow as tf


if __name__ == "__main__":
    # flattened tensor, batch size of 2
    xnp = np.array([[1,2,3],[4,5,6]])
    xtens = tf.constant(xnp,dtype=tf.float32)

    nbatchnorm = tf.keras.layers.BatchNormalization()(xtens)

    # tensorflow output
    print(nbatchnorm)

    # what I expect to see
    xmean = np.mean(xnp,axis=1)
    xstd = np.std(xnp,axis=1)
    # set the mean to 0 and the standard deviation to 1 for each sample
    normalized = (xnp - xmean.reshape(-1,1)) / xstd.reshape(-1,1)

    print(normalized)

输出:

tf.Tensor(
[[0.9995004 1.9990008 2.9985013]                                                                                                     
 [3.9980016 4.997502  5.9970026]], shape=(2, 3), dtype=float32)                                                 

[[-1.22474487  0.          1.22474487]           
 [-1.22474487  0.          1.22474487]]   

有人能给我解释一下为什么这些输出不相同或至少不相似吗?我看不出这是怎么正常化的


Tags: toimportlayerstftensorflowasnpkeras
1条回答
网友
1楼 · 发布于 2024-09-30 14:31:57

嗯,Batch Normalization取决于它的算法的许多因素,下面将对此进行解释

enter image description here

  • μB是输入平均值的向量,在整个mini中进行评估- 批次B(每个输入包含一个平均值)
  • σB是输入标准偏差的向量,也在 整个小批量(每批包含一个标准偏差) 输入)
  • mB是小批量中的实例数
  • (i)是用于 实例一
  • γ是层的输出比例参数向量(它包含一个 每个输入的比例参数)
  • 表示元素乘法(每个输入都是 乘以其相应的输出比例参数)
  • β是层(it)的输出移位(偏移)参数向量 每个输入包含一个偏移参数)。每个输入由 它对应的移位参数
  • ε是一个很小的数字,可以避免被零除(通常为10–5)。 这称为平滑项
  • z(i)是BN操作的输出。这是一个重新缩放和移动的 输入的版本

相关问题 更多 >