有批标准化与无批标准化的学习

时间:2020-05-09 19:28:05

标签: python machine-learning deep-learning batch-normalization

批处理规范化的主要目标是其更快的优化速度。为了确认这一点,我创建了一个带有和不带有批处理规范化的模型,如下所示;

无BN:

model=Sequential()
model.add(Dense(units=1,activation='linear',use_bias=False,kernel_initializer=init_1,input_shape=(28,28,1),trainable=False))
model.add(Flatten())
model.add(Dense(units=1024,kernel_initializer=init_2))
model.add(Activation(activation='relu'))
model.add(Dense(units=10,kernel_initializer=init_2))
model.add(Activation(activation='softmax'))

使用BN:

model=Sequential()
model.add(Dense(units=1,activation='linear',use_bias=False,kernel_initializer=init_1,input_shape=(28,28,1),trainable=False))
model.add(Flatten())
model.add(Dense(units=1024,kernel_initializer=init_2))
model.add(BatchNormalization())
model.add(Activation(activation='relu'))
model.add(Dense(units=10,kernel_initializer=init_2))
model.add(Activation(activation='softmax'))

然后按照如下所示对模型进行编译和训练以增强数据;

opt=optimizers.Adam(learning_rate=0.001)
model.compile(optimizer=opt,loss='categorical_crossentropy',metrics=['accuracy'])
model.fit_generator(iter,steps_per_epoch=np.ceil(len(X_train)/64),epochs=30)

令我惊讶的是,我发现模型没有BN收敛更快

为进一步确认发现,我通过改变隐藏层中的单元数进行了尝试,并得到了以下结果(这次使用fit()方法而不是fit_generator()并使用原始数据而不是扩充数据) ;

否。隐藏单位数= 5 enter image description here

否。隐藏单元数= 50 enter image description here

否。隐藏单元数= 100 enter image description here

从图中可以看出,该模型在不进行批量归一化的情况下收敛速度似乎更快,并且比归一化所实现的精度更高。

请帮助我找出我在哪里做错了。谢谢。

0 个答案:

没有答案