tensorflow中的剩余单元实现

时间:2018-06-08 18:17:25

标签: tensorflow resnet deep-residual-networks

我正在尝试根据https://arxiv.org/pdf/1512.03385.pdfhttps://arxiv.org/pdf/1603.05027.pdf实施Resnet v1和v2的剩余单元。所以这里是我关注在tensorflow中实现的剩余单位:

Resnet Unit v1 and its bottleneck alternative

v2剩余单位是(b)如下:

enter image description here

因此,我在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之前,我们不应该对原始输入执行投影吗?我问,因为这是我在上面的第二张图片中看到的。我想我们不应该触摸身份/快捷方式......

如果我弄错了,请纠正我。

非常感谢任何帮助!

0 个答案:

没有答案