![](/img/trans.png)
[英]Comparing Conv2D with padding between Tensorflow and PyTorch
[英]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)
我有幾個問題:
tensorflow
使用same
padding ,在 left/right/top/bottom 上添加了多少padding
?pytorch
使用padding=2
,在 left/right/top/bottom 上添加了多少padding
?conv
層?提前致謝。
回答您的問題:
Pytorch 沒有 padding = 'same' 的原因很簡單,是因為它的動態計算圖與 Tensorflow 靜態圖相比。
由於使用了不同的填充,這兩個代碼並不等效。
“相同”填充嘗試在左側和右側均勻填充,但如果要添加的列數為奇數,則會在右側添加額外的列。
Pytorch 中的 'Padding = 2' 在任一側應用 2 個隱式填充。
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.