news 2026/10/6 21:16:12

卷积神经网络深度探索:多输入多输出卷积层高级应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
卷积神经网络深度探索:多输入多输出卷积层高级应用

多输入多输出通道

学习目标

本课程将带领学员学习使用多输入多输出通道来扩展卷积层的模型,学习1×11\times 11×1卷积层的使用场景,更深入地研究有多输入和多输出的卷积核。

相关知识点

  • 具有多输入和多输出通道的卷积核
  • 1×11\times 11×1卷积层应用

学习内容

1 具有多输入和多输出通道的卷积核

虽然我们在历史实验中描述了构成每个图像的多个通道和多层卷积层。例如彩色图像具有标准的RGB通道来代表红、绿和蓝。
但是到目前为止,我们仅展示了单个输入和单个输出通道的简化例子。
这使得我们可以将输入、卷积核和输出看作二维张量。

当我们添加通道时,我们的输入和隐藏的表示都变成了三维张量。例如,每个RGB输入图像具有3×h×w3\times h\times w3×h×w的形状。我们将这个大小为333的轴称为通道(channel)维度。本课程将更深入地研究具有多输入和多输出通道的卷积核。

1.1 多输入通道

当输入包含多个通道时,需要构造一个与输入数据具有相同输入通道数的卷积核,以便与输入数据进行互相关运算。假设输入的通道数为cic_ici​,那么卷积核的输入通道数也需要为cic_ici​。如果卷积核的窗口形状是kh×kwk_h\times k_wkh​×kw​,那么当ci=1c_i=1ci​=1时,我们可以把卷积核看作形状为kh×kwk_h\times k_wkh​×kw​的二维张量。

然而,当ci>1c_i>1ci​>1时,我们卷积核的每个输入通道将包含形状为kh×kwk_h\times k_wkh​×kw​的张量。将这些张量cic_ici​连结在一起可以得到形状为ci×kh×kwc_i\times k_h\times k_wci​×kh​×kw​的卷积核。由于输入和卷积核都有cic_ici​个通道,我们可以对每个通道输入的二维张量和卷积核的二维张量进行互相关运算,再对通道求和(将cic_ici​的结果相加)得到二维张量。这是多通道输入和多输入通道卷积核之间进行二维互相关运算的结果。

在图1中,我们演示了一个具有两个输入通道的二维互相关运算的示例。阴影部分是第一个输出元素以及用于计算这个输出的输入和核张量元素:(1×1+2×2+4×3+5×4)+(0×0+1×1+3×2+4×3)=56(1\times1+2\times2+4\times3+5\times4)+(0\times0+1\times1+3\times2+4\times3)=56(1×1+2×2+4×3+5×4)+(0×0+1×1+3×2+4×3)=56。

图1:两个输入通道的互相关计算

为了加深理解,我们实现一下多输入通道互相关运算。
简而言之,我们所做的就是对每个通道执行互相关操作,然后将结果相加。

#安装依赖包%pip install torch==2.1.0%pip install torchvision==0.16.0%pip install d2l
importtorchfromd2limporttorchasd2l
defcorr2d_multi_in(X,K):# 先遍历“X”和“K”的第0个维度(通道维度),再把它们加在一起returnsum(d2l.corr2d(x,k)forx,kinzip(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]]])corr2d_multi_in(X,K)

out:

tensor([[ 56., 72.], [104., 120.]])
1.2 多输出通道

到目前为止,不论有多少输入通道,我们还只有一个输出通道。然而,每一层有多个输出通道是至关重要的。在最流行的神经网络架构中,随着神经网络层数的加深,我们常会增加输出通道的维数,通过减少空间分辨率以获得更大的通道深度。直观地说,我们可以将每个通道看作对不同特征的响应。而现实可能更为复杂一些,因为每个通道不是独立学习的,而是为了共同使用而优化的。因此,多输出通道并不仅是学习多个单通道的检测器。

用cic_ici​和coc_oco​分别表示输入和输出通道的数目,并让khk_hkh​和kwk_wkw​为卷积核的高度和宽度。为了获得多个通道的输出,我们可以为每个输出通道创建一个形状为ci×kh×kwc_i\times k_h\times k_wci​×kh​×kw​的卷积核张量,这样卷积核的形状是co×ci×kh×kwc_o\times c_i\times k_h\times k_wco​×ci​×kh​×kw​。在互相关运算中,每个输出通道先获取所有输入通道,再以对应该输出通道的卷积核计算出结果。

如下所示,我们实现一个计算多个通道的输出的互相关函数。

defcorr2d_multi_in_out(X,K):# 迭代“K”的第0个维度,每次都对输入“X”执行互相关运算。# 最后将所有结果都叠加在一起returntorch.stack([corr2d_multi_in(X,k)forkinK],0)

通过将核张量K与K+1(K中每个元素加111)和K+2连接起来,构造了一个具有333个输出通道的卷积核。

K=torch.stack((K,K+1,K+2),0)K.shape

out:

torch.Size([3, 2, 2, 2])

下面,我们对输入张量X与卷积核张量K执行互相关运算。现在的输出包含333个通道,第一个通道的结果与先前输入张量X和多输入单输出通道的结果一致。

corr2d_multi_in_out(X,K)

out:

tensor([[[ 56., 72.], [104., 120.]], [[ 76., 100.], [148., 172.]], [[ 96., 128.], [192., 224.]]])

21×11\times 11×1卷积层应用

1×11 \times 11×1卷积,即kh=kw=1k_h = k_w = 1kh​=kw​=1,看起来似乎没有多大意义。
毕竟,卷积的本质是有效提取相邻像素间的相关特征,而1×11 \times 11×1卷积显然没有此作用。
尽管如此,1×11 \times 11×1仍然十分流行,经常包含在复杂深层网络的设计中。下面,让我们详细地解读一下它的实际作用。

因为使用了最小窗口,1×11\times 11×1卷积失去了卷积层的特有能力——在高度和宽度维度上,识别相邻元素间相互作用的能力。
其实1×11\times 11×1卷积的唯一计算发生在通道上。

图2展示了使用1×11\times 11×1卷积核与333个输入通道和222个输出通道的互相关计算。
这里输入和输出具有相同的高度和宽度,输出中的每个元素都是从输入图像中同一位置的元素的线性组合。
我们可以将1×11\times 11×1卷积层看作在每个像素位置应用的全连接层,以cic_ici​个输入值转换为coc_oco​个输出值。
因为这仍然是一个卷积层,所以跨像素的权重是一致的。
同时,1×11\times 11×1卷积层需要的权重维度为co×cic_o\times c_ico​×ci​,再额外加上一个偏置。

图2:互相关计算使用了具有3个输入通道和2个输出通道的卷积核

下面,我们使用全连接层实现1×11 \times 11×1卷积。
请注意,我们需要对输入和输出的数据形状进行调整。

defcorr2d_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)returnY.reshape((c_o,h,w))

当执行1×11\times 11×1卷积运算时,上述函数相当于先前实现的互相关函数corr2d_multi_in_out。让我们用一些样本数据来验证这一点。

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)assertfloat(torch.abs(Y1-Y2).sum())<1e-6
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 4:11:25

SBC基础全解析:入门必看的硬件与软件准备清单

SBC入门实战指南&#xff1a;从一块板子到完整系统的搭建之路 你有没有过这样的经历&#xff1f;兴冲冲买回一块树莓派&#xff0c;插上电源却黑屏无响应&#xff1b;或者系统反复崩溃&#xff0c;查了半天才发现是SD卡写穿了。别担心&#xff0c;这几乎是每个SBC&#xff08;…

作者头像 李华
网站建设 2026/10/5 5:35:02

使用Arduino ML库在ESP32部署音频分类模型实战

让ESP32“听见”世界&#xff1a;用Arduino ML库实现本地音频分类实战你有没有想过&#xff0c;一个售价不到30元的ESP32开发板&#xff0c;加上一块几块钱的数字麦克风&#xff0c;就能变成一个能听懂“救命”、“着火了”或“玻璃碎了”的智能耳朵&#xff1f;这不是科幻。随…

作者头像 李华
网站建设 2026/10/5 5:35:07

CSDN官网没讲清楚的IndexTTS2细节,这里一次性说透

CSDN官网没讲清楚的IndexTTS2细节&#xff0c;这里一次性说透 在智能语音内容爆发的今天&#xff0c;越来越多的内容创作者、开发者甚至中小企业开始尝试自建语音合成系统。然而&#xff0c;面对阿里云、百度语音等商业API高昂的成本和数据隐私顾虑&#xff0c;以及VITS、So-VI…

作者头像 李华
网站建设 2026/10/5 5:34:55

Chromedriver下载地址失效应对策略

Chromedriver下载地址失效应对策略 在现代Web自动化测试和爬虫开发中&#xff0c;一个看似简单的环节——启动Selenium脚本——却常常因为一个“小文件”卡住&#xff1a;Chromedriver。这个轻量级的可执行程序&#xff0c;作为Selenium与Chrome浏览器之间的桥梁&#xff0c;一…

作者头像 李华
网站建设 2026/10/5 5:34:54

IndexTTS2 V23情感控制全面升级,科哥亲授AI语音生成核心技术

IndexTTS2 V23情感控制全面升级&#xff0c;科哥亲授AI语音生成核心技术 在智能语音助手越来越“懂你”的今天&#xff0c;我们是否曾期待过它们不仅能准确朗读文字&#xff0c;还能真正理解一句话背后的喜怒哀乐&#xff1f;比如当你输入一句“我失恋了”&#xff0c;系统不是…

作者头像 李华
网站建设 2026/10/6 13:04:10

GitHub镜像网站加速Pull Request合并流程

GitHub镜像网站加速Pull Request合并流程 在开源项目协作中&#xff0c;一个 Pull Request 从提交到最终合并&#xff0c;理想状态下应当是“快速验证、即时反馈、顺畅集成”。但在现实中&#xff0c;尤其是对于包含大型模型文件或依赖复杂环境的 AI 项目&#xff0c;开发者常常…

作者头像 李华