Слой пакетной нормализации в кератах приводит к колеблющейся точности проверки - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь использовать слои 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'))
...