首页 > 解决方案 > CNN 只有 2 个 ConvLayer 时的批量归一化?

问题描述

我想知道当 CNN 中只有 2 个卷积层时使用 BatchNormalization 是否有问题。这会对分类性能产生不利影响吗?现在我指的不是训练时间,而是准确度?我的网络是否因不必要的层而过载?我想用一个小数据集训练网络。

model = Sequential()
model.add(Conv2D(32, kernel_size=(3,3), input_shape=(28,28,1), padding = 'same'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.2))
model.add(Conv2D(64, kernel_size=(3,3), padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(128))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
model.compilke(optimizer="Adam", loss='categorical_crossentropy, metrics =['accuracy'])

非常感谢。

标签: conv-neural-networkbatch-normalizationdropoutmax-pooling

解决方案


不要与 Dropout 一起使用

批量归一化提供了一些正则化效果,减少了泛化错误,也许不再需要使用dropout 进行正则化

从 Modified BN-Inception 中移除 Dropout 可以加快训练速度,而不会增加过拟合。

— 批量标准化:通过减少内部协变量偏移来加速深度网络训练,2015 年

此外,在同一个网络中使用批量标准化和 dropout 可能不是一个好主意。

原因是由于在 dropout 过程中节点的随机丢弃,用于规范前一层激活的统计数据可能会变得嘈杂。

批量归一化有时还可以减少泛化误差并允许省略 dropout,因为用于归一化每个变量的统计量估计中存在噪声。

— 第 425 页,深度学习,2016 年。

来源 - machinelearningmastery.com - 批量标准化


推荐阅读