【发布时间】:2017-07-10 15:14:54
【问题描述】:
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
当我在 keras 中使用官方 inception_v3 模型时,我发现他们在 'relu' 非线性之后使用了 BatchNormalization,如上面的代码脚本。
但在 Batch Normalization 论文中,作者说
我们在非线性之前立即添加 BN 变换,通过 归一化 x=Wu+b。
然后我查看了 tensorflow 中 inception 的实现,正如他们所说,它在非线性之前立即添加了 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)
【问题讨论】:
标签: tensorflow deep-learning theano keras