《动手学深度学习 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 时,如何使用矩阵乘法实现卷积? ?一直用的就是矩阵乘法哇

相关推荐
cooldream200922 分钟前
华为云Flexus+DeepSeek征文|基于华为云Flexus X和DeepSeek-R1打造个人知识库问答系统
人工智能·华为云·dify
Blossom.1183 小时前
使用Python和Scikit-Learn实现机器学习模型调优
开发语言·人工智能·python·深度学习·目标检测·机器学习·scikit-learn
scdifsn5 小时前
动手学深度学习12.7. 参数服务器-笔记&练习(PyTorch)
pytorch·笔记·深度学习·分布式计算·数据并行·参数服务器
DFminer5 小时前
【LLM】fast-api 流式生成测试
人工智能·机器人
郄堃Deep Traffic5 小时前
机器学习+城市规划第十四期:利用半参数地理加权回归来实现区域带宽不同的规划任务
人工智能·机器学习·回归·城市规划
海盗儿6 小时前
Attention Is All You Need (Transformer) 以及Transformer pytorch实现
pytorch·深度学习·transformer
GIS小天6 小时前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月7日第101弹
人工智能·算法·机器学习·彩票
阿部多瑞 ABU6 小时前
主流大语言模型安全性测试(三):阿拉伯语越狱提示词下的表现与分析
人工智能·安全·ai·语言模型·安全性测试
cnbestec6 小时前
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
人工智能·线性代数·触觉传感器
不爱写代码的玉子6 小时前
HALCON透视矩阵
人工智能·深度学习·线性代数·算法·计算机视觉·矩阵·c#