-
多个输入通道:每个通道都有一个卷积核,结果是所有通道卷积结果的和
输入 X \mathbf{X} X: c i × n h × n w c_i \times n_h \times n_w ci×nh×nw
核 W \mathbf{W} W: c i × k h × k w c_i \times k_h \times k_w ci×kh×kw
输出 Y \mathbf{Y} Y: m h × m w m_h \times m_w mh×mw
Y = ∑ i = 0 c i X i , : , : ∗ ⋆ W i , : , : \mathbf{Y}=\sum_{i=0}^{c_{i}} \mathbf{X}_{i,:,:}^{*} \star \mathbf{W}_{i,:,:} Y=i=0∑ciXi,:,:∗⋆Wi,:,: -
多个输出通道:我们可以有多个三维卷积核,每个核生成一个输出通道
输入 X \mathbf{X} X: c i × n h × n w c_i \times n_h \times n_w ci×nh×nw
核 W \mathbf{W} W: c o × c i × k h × k w c_o \times c_i \times k_h \times k_w co×ci×kh×kw
输出 Y \mathbf{Y} Y: c o × m h × m w c_o \times m_h \times m_w co×mh×mw
Y i , : , : = X ⋆ W i , , : , : for i = 1 , … , c o \mathbf{Y}_{i,:,:}=\mathbf{X} \star \mathbf{W}_{i,,:,:} \quad \text { for } i=1, \ldots, c_{o} Yi,:,:=X⋆Wi,,:,: for i=1,…,co
计算复杂度(浮点计算数FLOP): O ( c i c o k h k w m h m w ) O(c_i c_o k_h k_w m_h m_w) O(cicokhkwmhmw) -
多个输入通道和输出通道
- 每个输出通道可以识别特定模式
- 输入通道识别并组合输入中的模式
-
1 x 1
卷积层k h = k w = 1 k_h = k_w = 1 kh=kw=1是一个受欢迎的选择。它不识别空间模式,只是融合通道。
相当于输入形状为 n h n w × c i n_h n_w \times c_i nhnw×ci,权重为 c o × c i c_o \times c_i co×ci的全连接层。
-
输出通道数是卷积层的超参数;每个输入通道有独立的二维卷积核,所有的通道结果相加得到一个输出通道结果;每个输出通道有独立的三维卷积核。
-
多输入通道互相关运算
import torch def corr2d(X, K): """计算二维互相关运算""" h, w = K.shape Y = torch.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1)) for i in range(Y.shape[0]): for j in range(Y.shape[1]): Y[i, j] = (X[i:i + h, j:j + w] * K).sum() return Y def corr2d_multi_in(X, K): # X[c_i, n_h, n_w], K[c_i, k_h, k_w] # for遍历的时候会对最外层的维度做遍历 return sum(corr2d(x, k) for x, k in zip(X, K))
-
多输入多输出通道互相关运算
import torch def corr2d_multi_in_out(X, K): # X[c_i, n_h, n_w], K[c_o, c_i, k_h, k_w] return torch.stack([corr2d_multi_in(X, k) for k in K], 0)
-
1 x 1
卷积import torch def corr2d_multi_in_out_1x1(X, K): c_i, h, w = X.shape c_o = K.shape[0] X = X.reshape((c_i, h * w)) K = K.reshape((c_o, c_i)) Y = torch.matmul(K, X) return Y.reshape((c_o, h, w))
-
假设输出的高宽没有变的话,通过不改变通道数; 假设将输出的高宽变为输入的
1/2
,通道数通常设为输入的2
倍。
21 卷积层里的多输入多输出通道 [动手学深度学习v2]
最新推荐文章于 2024-07-04 09:34:01 发布