【发布时间】:2021-06-24 04:40:22
【问题描述】:
我在 Keras 中找到了批量标准化的输出。 我的模型是:
#导入库
import numpy as np
import keras
from keras import layers
from keras.layers import Input, Dense, Activation, BatchNormalization, Flatten, Conv2D
from keras.models import Model
#模型
def HappyModel3(input_shape):
X_input = Input(input_shape, name='input_layer')
X = BatchNormalization(axis = 1, name = 'batchnorm_layer')(X_input)
X = Dense(1, activation='sigmoid', name='sigmoid_layer')(X)
model = Model(inputs = X_input, outputs = X, name='HappyModel3')
return model
编译模型 |这里的纪元数是 1
X_train=np.array([[1,1,-1],[2,1,1]])
Y_train=np.array([0,1])
happyModel_1=HappyModel3(X_train[0].shape)
happyModel_1.compile(optimizer=keras.optimizers.RMSprop(), loss=keras.losses.mean_squared_error)
happyModel_1.fit(x = X_train, y = Y_train, epochs = 1 , batch_size = 2, verbose=0 )
为 epochs=1 的模型找到 Batch Normalization 层的输出:
for i in range(0, len(happyModel_1.layers)):
tmp_model = Model(happyModel_1.layers[0].input, happyModel_1.layers[i].output)
tmp_output = tmp_model.predict(X_train)
if i in (0,1) :
print(happyModel_1.layers[i].name)
print(tmp_output.shape)
print(tmp_output)
print('\n')
代码输出为:
input_layer
(2, 3)
[[ 1. 1. -1.]
[ 2. 1. 1.]]
batchnorm_layer
(2, 3)
[[ 0.99003249 0.99388224 -0.99551398]
[ 1.99647105 0.99388224 0.9971655 ]]
我们在axis=1 | 上进行了标准化 Batch Norm 层输出:在轴 = 1 时,第 1 维均值为 1.5,第 2 维均值为 1,第 3 维均值为 0。 由于它的批次规范,我希望所有 3 个维度的均值都接近 0
当我将 epoch 增加到 1000 时会发生这种情况:
happyModel_2=HappyModel3(X_train[0].shape)
happyModel_2.compile(optimizer=keras.optimizers.RMSprop(), loss=keras.losses.mean_squared_error)
happyModel_2.fit(x = X_train, y = Y_train, epochs = 1000 , batch_size = 2, verbose=0 )
为 epochs=1000 的模型找到 Batch Normalization 层的输出:
for i in range(0, len(happyModel_2.layers)):
tmp_model = Model(happyModel_2.layers[0].input, happyModel_2.layers[i].output)
tmp_output = tmp_model.predict(X_train)
if i in (0,1) :
print(happyModel_2.layers[i].name)
print(tmp_output.shape)
print(tmp_output)
print('\n')
#代码输出
input_layer
(2, 3)
[[ 1. 1. -1.]
[ 2. 1. 1.]]
batchnorm_layer
(2, 3)
[[ -1.95576239e+00 8.08715820e-04 -1.86621261e+00]
[ 1.95795488e+00 8.08715820e-04 1.86590290e+00]]
我们在axis=1 | 上进行了标准化现在在axis = 1处,批量规范层输出为:第1维均值为0,第2维均值为0,第3维均值为0。这是一个预期的输出
我的问题是:Keras 中批量标准化的输出是否取决于时期数? (可能是的,当我们进行反向传播时,批量标准化参数会受到越来越多的 epoch 的影响)
【问题讨论】:
-
请在发布后校对并删除不相关的引号(''')。
-
已删除。谢谢推荐。
标签: python tensorflow keras deep-learning