簡體   English   中英

TensorFlow 和 PyTorch 中的 Conv2D 填充

[英]Conv2D padding in TensorFlow and PyTorch

我正在嘗試將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")

火炬

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

我有幾個問題:

  1. 上面的代碼是等價的嗎?
  2. 如果我們在tensorflow使用same padding ,在 left/right/top/bottom 上添加了多少padding
  3. 如果我們在pytorch使用padding=2 ,在 left/right/top/bottom 上添加了多少padding
  4. 如果以上兩個代碼片段不等價,那么我們如何制作相同的conv層?

提前致謝。

回答您的問題:

Pytorch 沒有 padding = 'same' 的原因很簡單,是因為它的動態計算圖與 Tensorflow 靜態圖相比。

  1. 由於使用了不同的填充,這兩個代碼並不等效。

  2. “相同”填充嘗試在左側和右側均勻填充,但如果要添加的列數為奇數,則會在右側添加額外的列。

  3. Pytorch 中的 'Padding = 2' 在任一側應用 2 個隱式填充。

  4. Pytorch 1.9 為 un-strided 或 stride = 1 卷積添加了 padding = 'same'。 這將適用於您的用例。

但是對於 stride > 2 padding 需要手動添加。

這是執行“相同”填充的良好實現:-

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM