Пакетная нормализация при передаче обучения

В настоящее время я передаю обучение, используя архитектуру MobilenetV2. Перед классификацией я добавил несколько плотных слоев сверху. Должен ли я добавить BatchNormalization между этими слоями?

base_model = MobileNetV2(weights='imagenet', include_top=False, input_shape=(200,200,3))
x = base_model.output
x = GlobalAveragePooling2D(name="Class_pool")(x)
x = Dense(512, activation='relu')(x)
x = BatchNormalization()(x)
x = Dropout(.4)(x)
x = Dense(1024, activation='relu')(x)
x = BatchNormalization()(x)
x = Dropout(.4)(x)
x = Dense(512, activation='relu')(x)
x = BatchNormalization()(x)
x = Dropout(.4)(x)
x = Dense(512, activation='relu')(x)
x = BatchNormalization()(x)
X = Dense(20,activation='softmax')(x)

Ранее я обучал эту сеть без какого-либо из этих слоев пакетной нормализации и изо всех сил пытался получить хорошую точность. Я добился лишь полууспешных результатов, попробовав множество комбинаций скорости обучения и замороженных слоев. Я надеюсь, что это поможет. Может ли слишком много слоев BatchNormalization быть плохим для сети?


person theastronomist    schedule 17.07.2020    source источник


Ответы (1)


Пакетная нормализация поможет со сдвигом ковариации, и, поскольку вы тренируетесь на новых пакетных данных, это будет хорошо для сети. Нет ничего лучше, чем пакетная нормализация, просто ставьте ее после каждого слоя, в котором есть активация.

person Abhishek Verma    schedule 17.07.2020