Реализация пакетной нормализации в Keras (бэкэнд TF) - до или после активации? - PullRequest
0 голосов
/ 24 апреля 2019

Рассмотрим следующий фрагмент кода

model = models.Sequential()
model.add(layers.Dense(256, activation='relu'))     # Layer 1
model.add(BatchNormalization())
model.add(layers.Dense(128, activation='relu'))     # Layer 2

Я использую Keras с бэкэндом Tensorflow.

Мой вопрос: выполняется ли BN до или после функции активации в реализации Keras?

Для большей ясности,

  1. Вопрос о том, следует ли применять BN до или после активации, подлежит обсуждению, в оригинальной (Ioffe and Szegedy 2015) статье предлагается «ДО», но комментарииИз приведенной ниже темы показывают разные мнения. Порядок нормализации и выпадения партии?

  2. В документации Keras (https://keras.io/layers/normalization/), написано «Нормализация активаций предыдущего слоя в каждой партии, т.е.применяет преобразование, которое поддерживает среднее значение активации, близкое к 0, и стандартное отклонение активации, близкое к 1.выше, BN применяется после 'relu' на уровне 1). Я хотел бы подтвердить, если это так?

    Кроме того, можно ли настроить, применяется ли BN до или после функции активации?

    Спасибо!

1 Ответ

3 голосов
/ 24 апреля 2019

Добавление BatchNorm после или до activation все еще остается открытой дискуссией.Оригинальная версия, предложенная авторами, хорошо работает и использовалась во многих реализациях.Но многие люди обнаружили, что BN после активации действительно хорошо работает и помогает в более быстрой конвергенции.Например, проверьте обсуждение в этой ветке.

Короче, это зависит от задачи!Какой из них будет лучше?Вы должны проверить это сами.И да, вы можете контролировать заказ.Например:

x = Conv2D(64, (3,3), activation=None)(inputs)
x = BatchNormalization()(x)
x = Activation("relu")(x)

или

x = Conv2D(64, (3,3), activation="relu")(inputs)
x = BatchNormalization()(x)
...