我正在尝试根据https://arxiv.org/pdf/1512.03385.pdf和https://arxiv.org/pdf/1603.05027.pdf实施Resnet v1和v2的剩余单元。所以这里是我关注在tensorflow中实现的剩余单位:
v2剩余单位是(b)如下:
因此,我在https://github.com/tensorflow/models/blob/master/official/resnet/resnet_model.py查看了他们的实现,并为resnet unit v1找到了以下内容:
def _building_block_v1(inputs, filters, training, projection_shortcut, strides,
data_format):
'''
.........
'''
if projection_shortcut is not None:
shortcut = projection_shortcut(inputs)
shortcut = batch_norm(inputs=shortcut, training=training, data_format=data_format)
所以我的第一个问题是:我们不应该在添加后使用批量规范,并且永远不会陷入与文章中提到的类似的身份函数h(x)
吗?
其次,在研究resnet unit v2的实现时,我发现了这个实现:
def _building_block_v2(inputs, filters, training, projection_shortcut, strides,
data_format):
'''
........
'''
shortcut = inputs
inputs = batch_norm(inputs, training, data_format)
inputs = tf.nn.relu(inputs)
# The projection shortcut should come after the first batch norm and ReLU
# since it performs a 1x1 convolution.
if projection_shortcut is not None:
shortcut = projection_shortcut(inputs)
在执行BN和RELU之前,我们不应该对原始输入执行投影吗?我问,因为这是我在上面的第二张图片中看到的。我想我们不应该触摸身份/快捷方式......
如果我弄错了,请纠正我。
非常感谢任何帮助!