8

Tensorflow 在github上有 resnet 的官方实现。它使用固定填充而不是普通的 tf.layers.conv2d。

像这样的东西:

def conv2d_fixed_padding(inputs, filters, kernel_size, strides, data_format):
  """Strided 2-D convolution with explicit padding."""
  # The padding is consistent and is based only on `kernel_size`, not on the
  # dimensions of `inputs` (as opposed to using `tf.layers.conv2d` alone).
  if strides > 1:
    inputs = fixed_padding(inputs, kernel_size, data_format)

  return tf.layers.conv2d(
      inputs=inputs, filters=filters, kernel_size=kernel_size, strides=strides,
      padding=('SAME' if strides == 1 else 'VALID'), use_bias=False,
      kernel_initializer=tf.variance_scaling_initializer(),
      data_format=data_format)

这样做的目的是什么?如果我们输入一个大小为 32x32 的图像并使用 tf.layer.conv2d 将填充方法设置为 SAME,步长 2,我们可以获得一个 16x16 的特征图。但在上面的代码中,它将在图像的两侧填充零,然后使用填充方法有效。

4

2 回答 2

7

假设我们的步幅为 2,内核大小为 3。

tf.layers.conv2d与填充一起使用SAME

情况1:

                   pad|              |pad
       inputs:      0 |1  2  3  4  5 |0 
                   |_______|
                         |_______|
                               |_______|

案例二:

                                     |pad
       inputs:      1  2  3  4  5  6 |0 
                   |_______|
                         |_______|
                               |_______|

您可以看到填充将取决于输入大小。确定具有相同的填充,使得输出大小为Math.ceil(input_size / stride)。您可以在此处阅读更多相关信息。

使用 resnet 的固定填充实现:

情况1:

                   pad|              |pad
       inputs:      0 |1  2  3  4  5 |0 
                   |_______|
                         |_______|
                               |_______|

案例二:

                   pad|                 |pad
       inputs:      0 |1  2  3  4  5  6 |0 
                   |_______|
                         |_______|
                               |_______|

填充由内核大小唯一定义,并且与输入大小无关。

于 2018-03-26T16:19:02.140 回答
2

如您所知,RNN 有这些跳过连接,其中网络如下所示: 在此处输入图像描述

等式变为:

F(x) + x   // Here 'x' is not input but the the kernel/filter. 

所以有了这个加法,我们假设 和 的维度F(x)x相同的。但如果不是这样,我们必须填充它们以使卷积发生。

这就是您会在ResNet TF 模型padding="SAME"中看到所有卷积的填充的原因

于 2018-03-17T12:06:55.917 回答