轉置卷積個人理解(以pytorch為例)

2021-09-21 01:59:14 字數 1374 閱讀 6131

直觀理解就是卷積的反向操作,比如4*4的用3*3的卷積核卷積,s=1,p=0,得到2*2的大小,反卷積就是要使輸入2*2的輸出為4*4的。

在pytorch使用

class torch.nn.convtranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=true, dilation=1)

注意,這上面的stride、padding是爭對於與原始卷積上的stride和padding 比如

from torch import nn

import torch

upsample=nn.convtranspose2d(3,3,kernel_size=3,stride=

1,padding=0)

in_=torch.randn(1,3,2,2)

out_=upsample(in_)

print(out_.size())

輸出:torch.size([1, 3, 4, 4])

原始卷積公式(x為輸入大小,y為輸出大小):

反卷積:

此時x就作為反卷積的輸出,在pytorch上有個output_padding引數,故輸出大小為後再加個output_padding

反卷積的實現原理實際就是卷積,但為了輸出大小反而變大,就在輸入中新增了padding

這個新增padding要注意要保持原始卷積畫素之間的連線關係,例如,直接卷積的輸入的左上畫素僅對輸出的左上畫素有貢獻,右上畫素僅連線到右上輸出畫素,等等。這個可參考理解

對於stride大於一的也一樣,不過還要在畫素之間新增padding,使其滿足上述要求

from torch import nn

import torch

upsample=nn.convtranspose2d(3,3,kernel_size=3,stride=

2,padding=0)

in_=torch.randn(1,3,2,2)

out_=upsample(in_)

print(out_.size())

輸出torch.size([1, 3, 5, 5])

這是因為轉置卷積在實際計算過程中相比直接卷積將權重矩陣轉置了再左乘輸入

這裡參考知乎上的回答

反卷積(轉置卷積)的理解

參考 開啟鏈結 就是這個圖啦,其中藍色部分是輸入的feature map,然後有3 3的卷積核在上面以步長為2的速度滑動,可以看到周圍還加里一圈padding,用更標準化的引數方式來描述這個過程 二維的離散卷積 n 2 方形的特徵輸入 i i i 方形的卷積核尺寸 k k k 每個維度相同的步長 s...

理解轉置卷積 反卷積 分步卷積

gan涉及到轉置卷積,這裡mark一下忘記了再回來看下。轉置卷積源於與卷積方向相反的願望,即從卷積的output形狀到input形狀,同時保持與卷積相相容的一種模式。轉置卷積可以作為卷積編碼器的解碼器 decode 的轉換,或者將當前特徵對映到乙個高維度的空間。要理解轉置卷積,先從卷積開始。我們先從...

反卷積 轉置卷積

搞明白了卷積網路中所謂deconv到底是個什麼東西後,不寫下來怕又忘記,根據參考資料,加上我自己的理解,記錄在這篇部落格裡。第一次看到deconv這個詞,以為deconv的結果就是卷積的逆,覺得神奇,不禁產生了 哦?轉置的卷積就可以求逆了嗎?這樣的想法,然後在matlab裡面實驗求證,我還記得當時以...