def conv2d_bn(x, nb_filter, nb_row, nb_col,
border_mode='same', subsample=(1, 1),
name=None):
'''Utility function to apply conv + BN.
'''
x = Convolution2D(nb_filter, nb_row, nb_col,
subsample=subsample,
activation='relu',
border_mode=border_mode,
name=conv_name)(x)
x = BatchNormalization(axis=bn_axis, name=bn_name)(x)
return x
Когда я использую официальную модель inception_v3 в keras, я нахожу, что они используют BatchNormalization после нелинейности 'relu', как указано выше.добавить пакетную нормализацию непосредственно перед нелинейностью или после в Keras?
Но в пакетной Нормализации бумаге, авторы сказали
мы добавим сразу преобразование BN до нелинейности, по нормировке х = У + Ь.
Затем я рассматриваю реализацию начала в тензорном потоке, который добавляет BN непосредственно перед нелинейностью, как они говорили. Для получения дополнительной информации в inception ops.py
Я смущен. Почему люди используют выше стиль в Keras, кроме следующих?
def conv2d_bn(x, nb_filter, nb_row, nb_col,
border_mode='same', subsample=(1, 1),
name=None):
'''Utility function to apply conv + BN.
'''
x = Convolution2D(nb_filter, nb_row, nb_col,
subsample=subsample,
border_mode=border_mode,
name=conv_name)(x)
x = BatchNormalization(axis=bn_axis, name=bn_name)(x)
x = Activation('relu')(x)
return x
В плотном случае:
x = Dense(1024, name='fc')(x)
x = BatchNormalization(axis=bn_axis, name=bn_name)(x)
x = Activation('relu')(x)