【发布时间】:2025-12-25 18:20:15
【问题描述】:
我想知道Keras中BatchNormalization是如何工作的,所以我写了代码:
X_input = keras.Input((2,))
X = keras.layers.BatchNormalization(axis=1)(X_input)
model1 = keras.Model(inputs=X_input, outputs=X)
输入是一批二维向量,并沿axis=1对其进行归一化,然后打印输出:
a = np.arange(4).reshape((2,2))
print('a=')
print(a)
print('output=')
print(model1.predict(a,batch_size=2))
输出是:
a=
array([[0, 1],
[2, 3]])
output=
array([[ 0. , 0.99950039],
[ 1.99900079, 2.9985013 ]], dtype=float32)
我无法弄清楚结果。据我所知,批次的平均值应该是 ([0,1] + [2,3])/2 = [1,2],var 是 1/2*(([0,1] - [1,2])^2 + ([2,3]-[1,2])^2) = [1,1]。最后用 (x - mean)/sqrt(var) 对其进行归一化,因此结果是 [-1, -1] 和 [1,1],我哪里错了?
【问题讨论】:
标签: tensorflow keras normalization