keras中的BatchNormalization层导致振荡验证准确性

时间:2018-05-17 09:31:06

标签: python keras conv-neural-network keras-layer batch-normalization

我正在尝试使用BatchNorm图层进行图像分类任务,但是我遇到了keras实现的问题。当我使用BatchNormalization图层运行相同的网络时,我获得了更好的训练准确性和验证准确性,但在训练期间,验证准确性强烈振荡。以下是训练过程的样子。

Training accuracy with batchnorm

Training accuracy without batchnorm

我尝试更改批量大小(从128到1024),并更改动力参数i 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'))

0 个答案:

没有答案