【问题标题】:Batch Normalization when CNN with only 2 ConvLayer?CNN 只有 2 个 ConvLayer 时的批量归一化?
【发布时间】:2020-05-19 11:12:07
【问题描述】:

我想知道当 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-network batch-normalization dropout max-pooling


    【解决方案1】:

    不要与 Dropout 一起使用

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

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

    ——批量标准化:Accelerating Deep Network Training by Reducing Internal Covariate Shift, 2015

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

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

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

    ——第 425 页,Deep Learning,2016 年。

    来源 - machinelearningmastery.com - batch normalization

    【讨论】:

    • 同意,dropout 也是用来减少过拟合的(它是一个正则化器),但是你的网络已经很小了。
    猜你喜欢
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 2018-04-19
    • 1970-01-01
    • 2018-03-28
    • 2017-08-16
    • 1970-01-01
    相关资源
    最近更新 更多