【问题标题】:Conv2D padding in TensorFlow and PyTorchTensorFlow 和 PyTorch 中的 Conv2D 填充
【发布时间】:2021-07-06 13:36:10
【问题描述】:

我正在尝试将TensorFlow 模型转换为PyTorch,但遇到padding 的问题。我的相关平台代码如下:

TensorFlow

conv1 = tf.layers.conv2d(
                inputs=input_layer,
                filters=32,
                kernel_size=[5, 5],
                padding="same",
                activation=tf.nn.relu,
                name = "conv1")

PyTorch

conv1 = nn.Conv2d(1, 32, kernel_size=5, stride=1, padding=2)

我有几个问题:

  1. 以上代码是否等效?
  2. 如果我们在tensorflow 中使用same 填充,在左/右/上/下会添加多少padding
  3. 如果我们在pytorch 中使用padding=2,在左/右/上/下会添加多少padding
  4. 如果上面的两个代码sn-ps不等价,那我们怎么做同样的conv层呢?

提前致谢。

【问题讨论】:

    标签: tensorflow pytorch conv-neural-network


    【解决方案1】:

    回答您的问题:

    简单地说,Pytorch 没有 padding = 'same' 的原因是由于它的动态计算图与 Tensorflow 静态图相比。

    1. 由于使用了不同的填充,这两个代码不等效。

    2. 'Same' padding 尝试在左右均匀填充,但如果要添加的列数是奇数,则会在右侧添加一个额外的列。

    3. Pytorch 中的'Padding = 2' 在两侧应用 2 个隐式填充。

    4. Pytorch 1.9 为 un-stride 或 stride = 1 卷积添加了 padding = 'same'。这将适用于您的用例。

    但是对于 stride > 2 padding 需要手动添加。

    这是执行“相同”填充的良好实现:-

    https://github.com/rwightman/pytorch-image-models/blob/master/timm/models/layers/padding.py#L28

    【讨论】:

      猜你喜欢
      • 2019-03-29
      • 2019-08-05
      • 2020-05-06
      • 2020-11-04
      • 2018-11-13
      • 1970-01-01
      • 2021-05-23
      • 2020-09-18
      • 2021-02-15
      相关资源
      最近更新 更多