Tensorflow 为什么批量规范化会降低我的模型训练精度?

Tensorflow 为什么批量规范化会降低我的模型训练精度?,tensorflow,keras,conv-neural-network,batch-normalization,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.a

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

批量正常化并不保证性能会提高。但在某些情况下,它确实很有效

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

  • 增加培训的批量大小。这将为归一化提供更合适的平均值和标准偏差

  • 玩弄BN参数,特别是动量参数。更多关于params的信息请参见此处 我建议减小动量,然后再试一次

  • 如果它仍然不起作用,就把它排除在外