keras 中的 BatchNormalization 层导致验证准确度波动

rob*_*b_m 5 python conv-neural-network keras keras-layer batch-normalization

我正在尝试将 BatchNorm 层用于图像分类任务,但我在实现 keras 时遇到了问题。当我使用 BatchNormalization 层运行相同的网络时,我获得了更好的训练准确度和验证准确度,但在训练过程中,验证准确度波动很大。以下是训练的情况。

使用batchnorm训练准确度

没有batchnorm的训练精度

我曾尝试更改批量大小(从 128 到 1024),并更改 batchnorm 层的动量参数,但变化不大。

我在 conv/Dense 层和它们的激活层之间使用 batchnorm。

我还检查了 conv 层的归一化轴是否正确(使用 Theano 时轴 = 1)。

有没有人遇到过类似的问题?有一些关于 batchnorm 的 keras 实现的问题,但我还没有找到解决这个问题的方法。

感谢您对类似问题的任何指示或参考。

编辑:这是我用来构建 mdoel 的 keras 代码,但我尝试了不同的架构和不同的动力:

    # create model
    model = Sequential()
    model.add(Conv2D(20, (4, 4), input_shape=(input_channels,s,s), activation='relu'))
    model.add(MaxPooling2D(pool_size=(5, 5)))
    model.add(Conv2D(30, (3, 3), activation='relu'))
    model.add(MaxPooling2D(pool_size=(3, 3)))
    model.add(GlobalAveragePooling2D())
    model.add(Dense(128))
    if use_batch_norm:
        model.add(BatchNormalization(axis=1, momentum=0.6))
    model.add(Activation('relu'))
    model.add(Dropout(dropout_rate))
    model.add(Dense(nb_classes))
    if use_batch_norm:
        model.add(BatchNormalization(axis=1, momentum=0.6))
    model.add(Activation('softmax'))
Run Code Online (Sandbox Code Playgroud)