ConvTranspose2d¶
- class torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1, padding_mode='zeros', device=None, dtype=None)[source][source]¶
對由多個輸入平面組成的輸入圖像應用 2D 轉置卷積運算子。
這個模組可以被視為 Conv2d 對其輸入的梯度。它也被稱為fractionally-strided convolution或反卷積(deconvolution)(儘管它不是一個真正的反卷積運算,因為它沒有計算卷積的真反)。更多資訊,請參閱這裡的可視化以及Deconvolutional Networks論文。
此模組支援 TensorFloat32。
在某些 ROCm 設備上,當使用 float16 輸入時,此模組將使用不同的精度進行向後傳播。
stride
控制互相關的步幅。padding
控制兩側隱式零填充的數量,數量為dilation * (kernel_size - 1) - padding
個點。 有關詳細資訊,請參閱下面的註釋。output_padding
控制添加到輸出形狀一側的額外大小。 有關詳細資訊,請參閱下面的註釋。dilation
控制內核點之間的間距; 也稱為 à trous 演算法。 它很難描述,但這裡的連結有一個很好的dilation
作用的可視化。groups
控制輸入和輸出之間的連接。in_channels
和out_channels
都必須能被groups
整除。 例如,在 groups=1 時,所有輸入都與所有輸出進行卷積。
在 groups=2 時,該操作相當於並排放置兩個 conv 層,每個層看到一半的輸入通道並產生一半的輸出通道,然後將兩者連接起來。
在 groups=
in_channels
時,每個輸入通道都與其自己的濾波器集合(大小為 )進行卷積。
參數
kernel_size
、stride
、padding
、output_padding
可以是:單個
int
– 在這種情況下,相同的值用於高度和寬度尺寸兩個 int 的
tuple
– 在這種情況下,第一個 int 用於高度尺寸,第二個 int 用於寬度尺寸
注意
注意
- 參數
- 形狀
輸出: 或 ,其中
輸出高度 等於 (輸入高度 減 1) 乘以 stride[0] 減 2 乘以 padding[0] 加上 dilation[0] 乘以 (kernel_size[0] 減 1) 加上 output_padding[0] 加 1。
- 變數
範例
>>> # With square kernels and equal stride >>> m = nn.ConvTranspose2d(16, 33, 3, stride=2) >>> # non-square kernels and unequal stride and with padding >>> m = nn.ConvTranspose2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2)) >>> input = torch.randn(20, 16, 50, 100) >>> output = m(input) >>> # exact output size can be also specified as an argument >>> input = torch.randn(1, 16, 12, 12) >>> downsample = nn.Conv2d(16, 16, 3, stride=2, padding=1) >>> upsample = nn.ConvTranspose2d(16, 16, 3, stride=2, padding=1) >>> h = downsample(input) >>> h.size() torch.Size([1, 16, 6, 6]) >>> output = upsample(h, output_size=input.size()) >>> output.size() torch.Size([1, 16, 12, 12])