为什么批量归一化会降低我的模型训练准确度?

时间:2021-03-04 08:13:20

标签: tensorflow keras conv-neural-network batch-normalization

在我添加批量归一化层之前,我的模型的训练准确度为 97%,但是一旦我添加了批量归一化层,我的准确度就下降到了 70%。为什么会发生这种情况以及在进行批量标准化的同时提高准确性的任何方法?

model = Sequential()
    model.add(Conv2D(32, (3, 3), input_shape=input_shape))
    model.add(Activation('relu'))
    model.add(BatchNormalization())
    model.add(MaxPooling2D(pool_size=(2, 2)))
    
    #first hidden layer 
    model.add(Conv2D(32, (3, 3)))
    model.add(Activation('relu'))
    model.add(BatchNormalization())
    model.add(MaxPooling2D(pool_size=(2, 2)))
    
    #output layer
    model.add(Flatten())
    model.add(Dense(64))
    model.add(Activation('relu'))
    model.add(Dropout(0.5))
    model.add(Dense(1))
    model.add(Activation('sigmoid'))
    model.summary()
    
    model_checkpoint = ModelCheckpoint( "model.hdf5", verbose=1, save_best_only=True)
    model.compile(loss='binary_crossentropy',
                  optimizer= 'adam',
                  metrics=['accuracy'])

1 个答案:

答案 0 :(得分:1)

批量标准化并不能保证您的性能会提高。但它在某些情况下效果很好。

您可以尝试做的一件事是:

  1. 增加训练的批量大小。这将为归一化提供更合适的均值和​​标准差。

  2. 使用 BN 参数,特别是动量参数。在此处查看有关参数 https://keras.io/api/layers/normalization_layers/batch_normalization/ 的更多信息 我建议减少动力,然后再试一次。

  3. 如果它仍然不起作用,请忽略它。