动手学深度学习(Pytorch版)代码实践 -卷积神经网络-21多输入多输出通道

embedded/2024/10/22 13:35:38/

21多输入多输出通道

在这里插入图片描述
在这里插入图片描述

import torch
from d2l import torch as d2ldef corr2d(X, K):"""计算二维互相关运算"""h, w = K.shapeY = 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 和滤波器 k,调用 corr2d 函数,并将所有结果相加。return sum(corr2d(x, k) for x, k in zip(X, K))#zip(X, K) 会生成一个元组迭代器,其中每个元组包含 X 和 K 中的对应元素# 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]]])print(corr2d_multi_in(X, K))
"""
tensor([[ 56.,  72.],[104., 120.]])
"""# 多输出通道
def corr2d_multi_in_out(X, K):#对于每个输出通道的滤波器 k,调用 corr2d_multi_in 函数,并将所有结果堆叠在一起形成新的张量。return torch.stack([corr2d_multi_in(X, k) for k in K], 0)# 将 K 扩展为一个具有三个输出通道的新滤波器
# K,K中每个元素加1,K中每个元素加2
K = torch.stack((K, K + 1, K + 2), 0)
print(K.shape)
#torch.Size([3, 2, 2, 2])
#具有3个输出通道、每个输出通道有2个输入通道的2x2滤波器的卷积核集合。
"""
第0维:新维度插入到最前面,堆叠的张量沿着第0维度排列。torch.Size([3, 2, 2, 2])
第1维:新维度插入到第二个位置,堆叠的张量沿着第1维度排列。torch.Size([2, 3, 2, 2])
第2维:新维度插入到第三个位置,堆叠的张量沿着第2维度排列。torch.Size([2, 2, 3, 2])
"""print(corr2d_multi_in_out(X, K))
"""
tensor([[[ 56.,  72.],[104., 120.]],[[ 76., 100.],[148., 172.]],[[ 96., 128.],[192., 224.]]])
"""# 1 * 1 卷积核
#可以将卷积层看作在每个像素位置应用的全连接层
#以c_i个输入值转换为c_o个输出值
def corr2d_multi_in_out_1x1(X, K):c_i, h, w = X.shape #获取输入张量 X 的通道数、高度和宽度。c_o = K.shape[0] #获取卷积核 K 的输出通道数。X = X.reshape((c_i, h * w)) # 3 * 9K = K.reshape((c_o, c_i)) # 2 * 3Y = torch.matmul(K, X)return Y.reshape((c_o, h, w)) # 2 * 3 * 3X = torch.normal(0, 1, (3, 3, 3))#表示具有2个输出通道,每个通道对应3个输入通道 1x1的滤波器
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

http://www.ppmy.cn/embedded/51219.html

相关文章

人工智能需要学习的知识有哪些?

人工智能需要学习的知识有哪些? 人工智能的学习涉及多个学科领域的知识&#xff0c;包括计算机科学、数学、机器学习、深度学习等。接下来具体分析一下: 一、计算机科学基础 计算机操作系统&#xff1a;学习计算机的基本工作原理&#xff0c;包括操作系统的功能、结构和管理。…

Qwen2大语言模型微调、导出、部署实践

上篇文章&#xff1a; Qwen1.5大语言模型微调实践_qwen1.5 7b微调-CSDN博客 我们介绍了Qwen1.5 大语言模型使用LLaMA-Factory 来微调&#xff0c;这篇文章我们介绍一下微调后模型的导出、部署。 一、模型导出 在webui 界面训练好模型之后点击“Export”选项卡&#xff0c;然…

【博客719】时序数据库基石:LSM Tree的增删查改

时序数据库基石&#xff1a;LSM Tree的增删查改 LSM结构 LSM树将任何的对数据操作都转化为对内存中的Memtable的一次插入。Memtable可以使用任意内存数据结构&#xff0c;如HashTable&#xff0c;BTree&#xff0c;SkipList等。对于有事务控制需要的存储系统&#xff0c;需要在…

如何验证Rust中的字符串变量在超出作用域时自动释放内存?

讲动人的故事,写懂人的代码 在公司内部的Rust培训课上,讲师贾克强比较了 Rust、Java 和 C++ 三种编程语言在变量越过作用域时自动释放堆内存的不同特性。 Rust 通过所有权系统和借用检查,实现了内存安全和自动管理,从而避免了大部分内存泄漏。Rust 自动管理标准库中数据类…

Oracle 入门--前提

目录 1.sqlplus 2.dual是什么&#xff1f; 3.SQL语句的种类 4.Oracle是如何工作的 5.Oracle查看配置文件 6.修改配置文件 7.常用的参数设置 1.sqlplus 管理数据库&#xff1a;启动&#xff0c;关闭&#xff0c;创建&#xff0c;删除对象......查看数据库的运行状态&…

【小程序】WXSS模板样式

目录 WXSS模板样式 概述 什么是WXSS WXSS 和 CSS 的关系 rpx 什么是rpx尺寸单位 rpx的实现原理 样式导入 import 语法格式 全局样式和局部样式 全局样式 局部样式 全局配置 全局配置文件及常用的配置项 window 小程序窗口的组成部分 window节点常用的配置项…

中学理化生实验室建设及配置要求

在中学物理、化学、生物等学科教学中&#xff0c;实验占据了非常重要的地位&#xff0c;是整个教学过程中不可或缺的部分。很多理科教学需要在实验室完成演示和学习任务&#xff0c;实验室也是保证教学计划得以实施的物质基础。因此&#xff0c;中学理化生实验室建设标准与否&a…

echarts地图修改图例

要求&#xff1a;根据数据排名&#xff0c;前三名点亮橙色&#xff0c;其他地区根据数值分配不同颜色&#xff0c;并且要加上单位 效果图如下&#xff1a; 实现方法如下&#xff1a; visualMapFormat(list) {//先将数据按从大到小的顺序排列//当list长度为1时&#xff0c;点亮…