-
转置卷积
卷积不会增大输入的高宽,通常要么不变、要么减半;
转置卷积则可以用来增大输入高宽。
Y [ i : i + h , j : j + w ] + = X [ i , j ] ⋅ K Y[i: i+h, j: j+w]+=X[i, j] \cdot K Y[i:i+h,j:j+w]+=X[i,j]⋅K
-
如果卷积将输入从 ( h , w ) (h, w) (h,w)变成了 ( h ′ , w ′ ) (h', w') (h′,w′),同样超参数的转置卷积则从 ( h ′ , w ′ ) (h', w') (h′,w′)变成 ( h , w ) (h, w) (h,w)。
-
代码实现
import torch from torch import nn def trans_conv(X, K): h, w = K.shape Y = torch.zeros((X.shape[0] + h - 1, X.shape[1] + w - 1)) for i in range(X.shape[0]): for j in range(X.shape[1]): Y[i:i + h, j:j + w] += X[i, j] * K return Y
-
转置卷积是一种卷积
它将输入和核进行了重新排列;
同卷积一般是做下采样不同,它通常用作上采样;
如果卷积将输入从 ( h , w ) (h, w) (h,w)变成了 ( h ′ , w ′ ) (h', w') (h′,w′),同样超参数的转置卷积则从 ( h ′ , w ′ ) (h', w') (h′,w′)变成 ( h , w ) (h, w) (h,w)。
-
重新排列输入和核
-
当填充为0步幅为1时
将输入填充 k − 1 k-1 k−1( k k k是核窗口);
将核矩阵上下、左右翻转;
然后做正常卷积(填充0、步幅1)。
-
当填充为 p p p步幅为1时 [ p = 1 p=1 p=1]
将输入填充 k − p − 1 k-p-1 k−p−1( k k k是核窗口);
将核矩阵上下、左右翻转;
然后做正常卷积(填充0、步幅1)。
-
当填充为 p p p步幅为 s s s时 [ p = 0 p=0 p=0, s = 1 s=1 s=1]
在行和列之间插入 s − 1 s-1 s−1行或列;
将输入填充 k − p − 1 k-p-1 k−p−1( k k k是核窗口);
将核矩阵上下、左右翻转;
然后做正常卷积(填充0、步幅1)。
-
-
形状换算:输入高(宽)为 n n n,核 k k k,填充 p p p,步幅 s s s
转置卷积: n ′ = s n + k − 2 p − s n' = sn + k - 2p - s n′=sn+k−2p−s;
如果让高宽成倍增加,那么 k = 2 p + s k = 2p + s k=2p+s。
-
数学上的反卷积(deconvolution)是指卷积的逆运算,很少用在深度学习中。我们说的反卷积神经网络指用了转置卷积的神经网络。
47 转置卷积 [动手学深度学习v2]
于 2022-01-18 16:33:19 首次发布