Я пытаюсь использовать слои BatchNorm для задачи классификации изображений, но у меня возникают проблемы с реализацией keras. Когда я запускаю ту же сеть со слоями BatchNormalization, я получаю лучшую точность обучения и точность проверки, но во время обучения точность проверки сильно колеблется , Вот как выглядит тренировочный сюрвей.
Точность тренировки с батчнормом
Точность тренировки без батчнорма
Я попытался изменить размер пакета (с 128 до 1024) и изменить параметр импульса в слое батчнорм, но он сильно не меняется.
Я использую промежуток между слоями conv / Dense и слоями их активации.
Я также проверил, что ось нормализации верна для конвальных слоев (ось = 1 для Theano).
У кого-нибудь были подобные проблемы? Публикация проблем, связанных с реализацией keras в batchnorm, опубликована, но я пока не нашел решения этой проблемы.
Спасибо за любые ссылки или ссылки на подобные вопросы.
EDIT:
Вот код keras, который я использовал для сборки mdoel, но я пробовал разные архитектуры и разные импульсы:
# 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'))