《动手学深度学习 Pytorch版》 6.4 多输入多输出通道

python 复制代码
import torch
from d2l import torch as d2l

6.4.1 多输入通道

简言之,多通道即为单通道之推广,各参数对上即可。

python 复制代码
def corr2d_multi_in(X, K):
    # 先遍历"X"和"K"的第0个维度(通道维度),再把它们加在一起
    return sum(d2l.corr2d(x, k) for x, k in zip(X, K))

X = torch.tensor([[[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]],  # 构造双通道张量
               [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]])
K = torch.tensor([[[0.0, 1.0], [2.0, 3.0]], [[1.0, 2.0], [3.0, 4.0]]])

corr2d_multi_in(X, K)
tensor([[ 56.,  72.],
        [104., 120.]])

6.4.2 多输出通道

python 复制代码
def corr2d_multi_in_out(X, K):
    # 迭代"K"的第0个维度,每次都对输入"X"执行互相关运算。
    # 最后将所有结果都叠加在一起
    return torch.stack([corr2d_multi_in(X, k) for k in K], 0)

K = torch.stack((K, K + 1, K + 2), 0)  # 构造一个具有三个输出通道的卷积核
K, K.shape
(tensor([[[[0., 1.],
           [2., 3.]],
 
          [[1., 2.],
           [3., 4.]]],

[[[1., 2.],

[3., 4.]],

          [[2., 3.],
           [4., 5.]]],

[[[2., 3.],

[4., 5.]],

          [[3., 4.],
           [5., 6.]]]]),
 torch.Size([3, 2, 2, 2]))
python 复制代码
corr2d_multi_in_out(X, K)
tensor([[[ 56.,  72.],
         [104., 120.]],

        [[ 76., 100.],
         [148., 172.]],

        [[ 96., 128.],
         [192., 224.]]])

6.4.3 1 × 1 1\times1 1×1卷积层

1 × 1 1\times1 1×1 的卷积失去了卷积层在高度和宽度维度上识别相邻元素间相互作用的能力。可以将其看作再每个像素位置的全连接层。

python 复制代码
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))  # 展开为 h*w 的张量方便计算
    K = K.reshape((c_o, c_i))  # 同样的展开
    # 全连接层中的矩阵乘法
    Y = torch.matmul(K, X)
    return Y.reshape((c_o, h, w))
python 复制代码
X = torch.normal(0, 1, (3, 3, 3))
K = torch.normal(0, 1, (2, 3, 1, 1))

Y1 = corr2d_multi_in_out_1x1(X, K)
Y2 = corr2d_multi_in_out(X, K)
assert float(torch.abs(Y1 - Y2).sum()) < 1e-6  # 执行1*1卷积运算时上述函数相当于先前实现的互关函数

练习

(1)假设我们有两个卷积核,大小分别为 k 1 k_1 k1 和 k 2 k_2 k2 (中间没有非线性激活函数)。

a. 证明运算可以用单次卷积来表示。

b. 这个等效的单个卷积核的维数是多少呢?

c. 单次卷积是否可以用两个卷积来表示呢?

不会


(2)假设输入为 c i × h × w c_i\times h\times w ci×h×w,卷积核大小为 c o × c i × k h × k w c_o\times c_i\times k_h\times k_w co×ci×kh×kw,填充为 ( p h , p w ) (p_h,p_w) (ph,pw),步幅为 ( s h , s w ) (s_h,s_w) (sh,sw)。

a. 前向传播的计算成本(乘法和加法)是多少?
b. 内存占用空间是多大?
c. 反向传播的内存占用空间是多大?
d. 反向传播的计算成本是多少?

⌊ ( n h − k h + p h + s h ) / s h ⌋ × ⌊ ( n w − k w + p w + s w ) / s w ⌋ \left\lfloor(n_h-k_h+p_h+s_h)/s_h\right\rfloor\times\left\lfloor(n_w-k_w+p_w+s_w)/s_w\right\rfloor ⌊(nh−kh+ph+sh)/sh⌋×⌊(nw−kw+pw+sw)/sw⌋

a. 前向传播的计算成本为:

( ⌊ ( h − k h + p h + s h ) / s h ⌋ × ⌊ ( w − k w + p w + s w ) / s w ⌋ ) × c o × c i × ( k h × k w + 1 ) (\left\lfloor(h-k_h+p_h+s_h)/s_h\right\rfloor\times\left\lfloor(w-k_w+p_w+s_w)/s_w\right\rfloor)\times c_o\times c_i\times(k_h\times k_w+1) (⌊(h−kh+ph+sh)/sh⌋×⌊(w−kw+pw+sw)/sw⌋)×co×ci×(kh×kw+1)

b. 占用空间为:

( ⌊ ( h − k h + p h + s h ) / s h ⌋ × ⌊ ( w − k w + p w + s w ) / s w ⌋ ) × c o × c i × 4 B (\left\lfloor(h-k_h+p_h+s_h)/s_h\right\rfloor\times\left\lfloor(w-k_w+p_w+s_w)/s_w\right\rfloor)\times c_o\times c_i\times4B (⌊(h−kh+ph+sh)/sh⌋×⌊(w−kw+pw+sw)/sw⌋)×co×ci×4B

c. 不会

d. 不会


(3)如果我们将输入通道 c i c_i ci 和输出通道 c o c_o co 的数量加倍,计算量会增加多少?如果我们把填充数翻一番会怎么样?

如上题,将输入通道 c i c_i ci 和输出通道 c o c_o co 的数量加倍则计算量会增加 4 倍。

填充数翻一倍还要考虑步长。


(4)如果卷积核的高度和宽度是 k h = k w = 1 k_h=k_w=1 kh=kw=1,前向传播的计算复杂的是多少?

c o × c i × h × w c_o\times c_i\times h\times w co×ci×h×w


(5)本节最后一个示例中的变量 Y1 和 Y2 是否完全相同?为什么?

浮点数有误差,肯定不可能完全相同。


(6)当卷积窗口不是 1 × 1 1\times1 1×1 时,如何使用矩阵乘法实现卷积?

?一直用的就是矩阵乘法哇

相关推荐
Tom Boom8 分钟前
1.11.信息系统的分类【DSS】
人工智能·算法·机器学习·职场和发展·分类·数据挖掘·系统架构
扫地僧98512 分钟前
MuMu-LLaMA:通过大型语言模型进行多模态音乐理解和生成(Python代码实现+论文)
人工智能·语言模型·llama
skywalk816314 分钟前
Trae 是一款由 AI 驱动的 IDE,让编程更加愉悦和高效。国际版集成了 GPT-4 和 Claude 3.5,国内版集成了DeepSeek-r1
人工智能·trae
WenGyyyL20 分钟前
使用OpenCV和MediaPipe库——驼背检测(姿态监控)
人工智能·python·opencv·算法·计算机视觉·numpy
梓羽玩Python33 分钟前
开源版Manus来了!14.7k标星的OpenManus,让AI替你全自动执行任务!
人工智能·github
广拓科技33 分钟前
中国视频生成 AI 开源潮:腾讯阿里掀技术普惠革命,重塑内容创作格局
人工智能·开源
dr李四维43 分钟前
Java在小米SU7 Ultra汽车中的技术赋能
java·人工智能·安卓·智能驾驶·互联·小米su7ultra·hdfs架构
guanshiyishi44 分钟前
ABeam 德硕 | 中国汽车市场(1)——正在推进电动化的中国汽车市场
人工智能·物联网·汽车
思茂信息1 小时前
CST直角反射器 --- 距离多普勒(RD图), 毫米波汽车雷达ADAS
前端·人工智能·5g·汽车·无人机·软件工程
瑞瑞大大1 小时前
简单介绍下Manus功能
人工智能