내가 BatchNormalization가 keras 작동 방법을 알고 싶어요, 그래서 코드 쓰기 :케라의 일괄 정규화는 어떻게 작동합니까?
X_input = keras.Input((2,))
X = keras.layers.BatchNormalization(axis=1)(X_input)
model1 = keras.Model(inputs=X_input, outputs=X)
입력이 두 dimenstions 벡터의 배치이며, 축 = 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]입니다.
입력 값이 변경되지 않는 이유는 아직도 이해할 수 없습니다. 정규화에서 [-1, -1]과 [1,1]을 얻습니다. 감마를 곱해서 베타를 추가하더라도 동일한 수를 얻을 수 없습니다. 또한, batch_size = 4를 4 개의 무작위 입력 벡터로 시도했지만 여전히 동일한 수를 얻습니다. –
BatchNormalization은 사용자와 마찬가지로 평균 및 분산을 계산하지 않지만 이는 (상수) 매개 변수입니다. 이 레이어를 트레이닝하지 않으므로 초기 값은 평균 = 0이고 분산은 1입니다. – YSelf
도움에 감사드립니다! –