首页 > 解决方案 > 为什么批量标准化会降低我的模型训练准确性?

问题描述

在我添加批量归一化层之前,我的模型的训练准确度为 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'])

标签: tensorflowkerasconv-neural-networkbatch-normalization

解决方案


批量标准化并不能保证您的性能会提高。但在某些情况下它确实运作良好。

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

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

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

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


推荐阅读