6-5 多输入多输出通道

news2024/9/23 1:36:00

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

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

多输入通道

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

然而,当 c i > 1 c_{i}>1 ci>1时,我们卷积核的每个输入通道将包含形状为 k h × k w k_{h}\times k_{w} kh×kw的张量。将这些张量 c i c_{i} ci连结在一起可以得到形状为 c i × k h × k w c_{i}\times k_{h}\times k_{w} ci×kh×kw的卷积核。由于输入和卷积核都有 c i c_{i} ci个通道,我们可以对每个通道输入的二维张量和卷积核的二维张量进行互相关运算,再对通道求和(将 c i c_{i} ci的结果相加)得到二维张量。这是多通道输入和多输入通道卷积核之间进行二维互相关运算的结果。
请添加图片描述在 图6.4.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

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

import torch
from d2l import torch as d2l

# 接收两个参数:X 和 K。X 是输入数据,K 是卷积核。在多输入通道的卷积中,X 和 K 都可能有多个通道。
def corr2d_multi_in(X, K):
    # 先遍历“X”和“K”的第0个维度(通道维度),再把它们加在一起
    # 对输入 X 和卷积核 K 的第0个维度(即通道维度)进行遍历,然后将每个通道的互相关结果加起来。这是多通道输入处理的常规方法。
    return sum(d2l.corr2d(x, k) for x, k in zip(X, K))
    # 使用生成器表达式结合 zip 函数将输入 X 和卷积核 K 的每个通道配对,
    # 然后对每一对使用 d2l.corr2d 函数计算二维互相关。
    # d2l.corr2d 函数应该是计算单通道输入和单通道卷积核之间的二维互相关。
    # sum 函数最后将所有通道的计算结果相加,得到最终的输出。

我们可以构造与 图6.4.1中的值相对应的输入张量 X X X和核张量 K K 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)

请添加图片描述

多输出通道

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

c i c_{i} ci c o c_{o} co分别表示输入和输出通道的数目,并让 k h k_{h} kh k w k_{w} kw为卷积核的高度和宽度。为了获得多个通道的输出,我们可以为每个输出通道创建一个形状为 c i × k h × k w c_{i}\times k_{h}\times k_{w} ci×kh×kw的卷积核张量,这样卷积核的形状是 c o × c i × k h × k w c_{o}\times c_{i}\times k_{h}\times k_{w} co×ci×kh×kw在互相关运算中,每个输出通道先获取所有输入通道,再以对应该输出通道的卷积核计算出结果

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

# 接受两个参数:X 和 K。这里的 X 是输入数据,可能包含多个输入通道;
# K 是卷积核,它通常是一个四维张量,其中第一个维度表示输出通道的数量,后续维度分别对应输入通道、卷积核的高和宽。
def corr2d_multi_in_out(X, K):
    # 迭代“K”的第0个维度,每次都对输入“X”执行互相关运算。
    # 遍历卷积核 K 的第0个维度(输出通道)。对于每个输出通道的卷积核,都会对输入数据 X 执行一次完整的互相关操作。
    # 最后将所有结果都叠加在一起
    # 函数将对每个输出通道得到的二维互相关结果进行堆叠,这样可以保持输出结果的维度与卷积核的输出通道数一致。
    return torch.stack([corr2d_multi_in(X, k) for k in K], 0)
    # 这是一个列表推导式,对 K 中的每个卷积核 k(每个 k 代表一个特定输出通道的所有输入通道的卷积核集合),使用之前定义的 corr2d_multi_in 函数对输入 X 进行互相关运算。corr2d_multi_in 函数负责处理多输入通道的互相关运算。
    # 使用 torch.stack 函数将所有单独的输出通道结果堆叠在一起。
    # 堆叠是沿着新的第0维度进行的,这意味着最终输出的张量的第0维度将对应于输出通道的数量。

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

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

请添加图片描述

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

corr2d_multi_in_out(X, K)

请添加图片描述

1 × 1 1\times 1 1×1卷积层

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

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

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

请添加图片描述

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

# 1x1 卷积核在卷积神经网络中通常用于调整网络中间层的通道数,以及实现跨通道的交互和信息整合。
def corr2d_multi_in_out_1x1(X, K):
# 接受两个参数:X 和 K。
# 这里的 X 是输入数据,通常是一个三维张量(输入通道数 c_i,高度 h,和宽度 w);
# K 是卷积核,是一个四维张量,其中第一个维度是输出通道数 c_o,后面的维度是输入通道数、高和宽(在 1x1 卷积中,高和宽都是1)。
    c_i, h, w = X.shape
    # 从输入张量 X 的形状中提取输入通道数 c_i,高度 h,和宽度 w。
    c_o = K.shape[0]
    # 从卷积核张量 K 的形状中提取输出通道数 c_o,这是 K 的第一个维度。
    X = X.reshape((c_i, h * w))
    # 将输入张量 X 重塑(reshape)成二维形状。这里,高度和宽度被合并成一个维度,从而将 X 转换为一个矩阵,其行数对应输入通道,列数对应每个通道的元素数(像素数)。
    K = K.reshape((c_o, c_i))
    # 将卷积核张量 K 重塑成二维形状。由于每个卷积核是 1x1 大小,所以 K 可以直接被视为从输入通道到输出通道的线性变换矩阵。
    # 全连接层中的矩阵乘法
    # 接下来的操作类似于全连接层中的矩阵乘法。这是因为 1x1 卷积实际上是在每个位置上对输入通道的线性组合,这与全连接层的操作非常类似。
    Y = torch.matmul(K, X)
    # 使用 torch.matmul 函数执行矩阵乘法。
    # K 作为左矩阵,与 X 相乘,输出 Y,其中包含了经过卷积核处理的所有位置的结果。
    # Y 的形状将是 [c_o, h * w]。
    return Y.reshape((c_o, h, w))
    # 最后,将结果 Y 重塑回三维形状,以确保输出张量与输入张量在空间维度上的对应。输出通道数为 c_o,高度和宽度恢复为 h 和 w。

# 这个函数通过利用 1x1 卷积的性质(实际上是每个位置的全连接层),高效地实现了跨通道的信息整合,常用于特征变换和减少或增加网络中的维度(通道数)。

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

X = torch.normal(0, 1, (3, 3, 3))
# 生成一个形状为 (3, 3, 3) 的张量 X,其中的元素从均值为 0,标准差为 1 的正态分布中随机生成。
# 这里的维度表示 X 有 3 个输入通道,每个通道是 3x3 的大小。
K = torch.normal(0, 1, (2, 3, 1, 1))
# 生成一个形状为 (2, 3, 1, 1) 的卷积核张量 K,同样元素值从均值为 0,标准差为 1 的正态分布中随机生成。
# 这里的维度表示 K 有 2 个输出通道,每个输出通道对应 3 个输入通道,每个卷积核大小为 1x1。

Y1 = corr2d_multi_in_out_1x1(X, K)
Y2 = corr2d_multi_in_out(X, K)
assert float(torch.abs(Y1 - Y2).sum()) < 1e-6
# 这行代码是一个断言,用来检查 Y1 和 Y2 之间的绝对差值之和是否小于1e-6 
# 这是一个非常小的值,用于验证两个结果在数值上是否足够接近,以认为这两种实现是等效的。如果两个结果之间的差异大于这个阈值,程序将抛出异常,表明实现可能存在问题。

小结

  • 多输入多输出通道可以用来扩展卷积层的模型。

  • 当以每像素为基础应用时, 1 × 1 1\times 1 1×1卷积层相当于全连接层

  1. 操作等效性:
  • 在传统的全连接层中,每个输出神经元与前一层的所有神经元相连接,权重是自由的,可以独立调整。全连接层通常用于学习输入特征之间可能的复杂和非线性关系。
  • 1 × 1 1\times 1 1×1 卷积中,卷积核的大小是 1 × 1 1\times 1 1×1,这意味着它在每个像素位置上仅考虑一个单独的像素点,而不是像标准卷积那样考虑一个区域。这样的操作对每个像素点都是独立的,类似于全连接层中的一个神经元只与前一层的一个神经元相连接。
  1. 通道间的交互:
  • 尽管 1 × 1 1\times 1 1×1 卷积只考虑单个像素,但它会同时考虑这个像素点在所有输入通道上的值。这意味着它可以对不同的输入通道进行加权求和,从而实现通道间的信息融合
    这种每像素点的处理方式实际上使得 1 × 1 1\times 1 1×1
    卷积层能够学习输入通道之间的关系,相当于在每个像素点位置应用一个全连接层,输入是所有输入通道的像素值,输出是所有输出通道的新像素值

    请添加图片描述
  • 1 × 1 1\times 1 1×1卷积层通常用于调整网络层的通道数量和控制模型复杂性
  1. 调整通道数量:
  • 1 × 1 1\times 1 1×1 卷积可以非常有效地改变输入数据的通道数。通过设置不同数量的 1 × 1 1\times 1 1×1 卷积核,可以控制输出数据的通道数。
  • 这种方法通常用于降低深度卷积网络中的参数数量和计算量,特别是在连续的卷积层之间,通过减少通道数减轻计算负担。
  1. 控制模型复杂性:
  • 使用 1 × 1 1\times 1 1×1 卷积层可以在不显著增加计算复杂性的情况下,增加网络的非线性和深度。这是因为 1 × 1 1\times 1 1×1 卷积虽然简单,但可以配合激活函数(如ReLU)来增加模型的表达能力
  • 它还允许在不大幅增加参数数量的情况下进行更深层次的网络设计,因为相比于较大卷积核的卷积层, 1 × 1 1\times 1 1×1 卷积核的参数要少得多

请添加图片描述
请添加图片描述
请添加图片描述
输入是前一层卷积层的超参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1976787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搭建高可用OpenStack(Queen版)集群(一)之架构环境准备

一、搭建高可用OpenStack&#xff08;Queen版&#xff09;集群之架构环境准备 一、架构设计 二、初始化基础环境 1、管理节点创建密钥对&#xff08;方便传输数据&#xff09; 所有控制节点操作 # ssh-keygen #一路回车即可 Generating public/private rsa key pair. Enter f…

MTK Android12 分析system_app允许vendor_mtk_audiohal_prop SELinux 权限问题

本文将尝试分析&#xff0c;在开发 Android 12 MTK 平台时遇到了 vendor_mtk_audiohal_prop 属性相关的 SELinux 权限问题。包括如何修改 SELinux 策略以允许 system_app 设置 vendor_mtk_audiohal_prop 属性。 问题描述 希望允许 system_app 设置 vendor_mtk_audiohal_prop 属…

SpringBoot+Vue图书(图书借阅)管理系统-附项目源码与配套文档

摘 要 本论文阐述了一套先进的图书管理系统的设计与实现&#xff0c;该系统采用Java语言&#xff0c;结合现代Web开发框架和技术&#xff0c;旨在为图书馆提供高效、灵活且用户友好的资源管理解决方案。系统利用Spring Boot框架为核心&#xff0c;整合MyBatis ORM工具&#…

基于 systemc-2.3.1的virtual device 接入 qemu-arm

1&#xff0c;下载systemc-2.3.1 下载网址&#xff1a; SystemC Files $ wget https://www.accellera.org/images/downloads/standards/systemc/systemc-2.3.1.tgz 2&#xff0c;编译安装 systemc-2.3.1 tar zxf systemc-2.3.1.tgz cd systemc-2.3.1/ export CXXg mkdir bu…

PS 2024 百种常用插件下载安装教程【免费使用,先到先得】

文章目录 软件介绍软件下载安装步骤 专栏推荐&#xff1a; 超多精品软件&#xff08;持续更新中…&#xff09; 软件推荐&#xff1a; PS 2024 PR 2024 软件介绍 PS常用插件 此软件整合了市面近百款ps处理插件&#xff0c;可实现&#xff1a;一键制作背景&#xff0c;一键抠图…

linux安装docker(实操教程)

一、安装前准备工作 1.查看服务器操作系统版本 2.查看服务器的操作系统内核版本 3.安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2如果不是root用户登陆的系统&#xff0c;需要手动输入sudo -i切换到root帐户 4.设置阿里云docker-ce镜像源 yum-c…

美国失业率大幅上升,增加九月份降息利率的可能性

令人失望的是&#xff0c;美国7月份经济增加了11.4万个工作岗位&#xff0c;低于预期的17.5万个和6月的17.9万个。平均小时工资持续下降&#xff0c;但失业率升至4.3%。美元继续走低&#xff0c;美国国债也在下跌&#xff0c;而黄金则获得了提振。 7月份的非农业支付数据令人失…

ST语言支持包下载安装(VS CODE)

VSCODE是微软提供的代码编辑器&#xff0c;支持非常多的语言。 1、VSCODE下载 2、ST语言支持包 3、ST语言支持包下载 4、ST语言 。。

IndentationError: expected an indented block 深度解析

IndentationError: expected an indented block 深度解析与实战指南 在Python编程中&#xff0c;IndentationError: expected an indented block是一个常见的错误&#xff0c;通常发生在代码块没有正确缩进时。这个错误表明代码中存在格式问题&#xff0c;可能是缩进不一致或缺…

基于PFC和ECN搭建无损RoCE网络的工作流程分析

无损RoCE网络概念 RDMA&#xff08;Remote Direct Memory Access&#xff0c;远程直接内存访问&#xff09;是一种为了解决网络传输中服务器端数据处理延迟而产生的技术。RDMA 将用户应用中的数据直接传入服务器的存储区&#xff0c;通过网络将数据从一个系统快速传输到远程系…

力扣421.数组中两个数的最大异或和

力扣421.数组中两个数的最大异或和 __builtin_clz()&#xff1a;求出mx二进制最高位之后的0的个数 class Solution {public:int findMaximumXOR(vector<int>& nums) {int mx *max_element(nums.begin(),nums.end());//__builtin_clz函数int high_bit mx ? 31 -…

单元测试JUnit

前言&#x1f440;~ 上一章我们介绍了自动化测试工具Selenium&#xff0c;今天讲解单元测试工具JUnit JUnit JUnit的使用 JUnit注解 BeforeAll和AfterAll注解 BeforeEach和AfterEach注解 参数化 方法获取参数&#xff08;动态参数&#xff09; 断言 用例执行顺序 测…

詹妮弗洛佩兹度过一个单身的季节!知情人:双方无法达成妥协,可能几日内将递交离婚申请!

对于詹妮弗洛佩兹来说&#xff0c;这是一个单身的季节&#xff0c;但这似乎并不是她希望从分居的丈夫本阿弗莱克那里得到的。当她在东海岸的汉普顿度过夏天时&#xff0c;这位 51 岁的演员正忙着在西海岸购买价值 2050 万美元的房产。洛佩兹显然认为&#xff0c;尽管他们已经分…

常见的CMS漏洞解析!

PhPMyadmin&#xff1a; 姿势⼀&#xff1a;通过日志文件拿Shell 利用mysql日志文件写shell&#xff0c;这个日志可以在mysql里改变它的存放位置&#xff0c;登录phpmyadmin可以修改 这个存放位置&#xff0c;并且可以修改它的后缀名。所以可以修改成php的后缀名就能获取⼀个…

通讯协议原始指令日志Python脚本分析

一.通讯协议格式&#xff1a; 二.通讯协议原始日志 [2024-04-18 14:58:59.659 D] 99 99 0E 00 01 0A 04 00 01 00 00 00 1E FN FN [2024-04-18 14:58:59.959 D] 99 99 0E 00 01 0C 03 03 01 00 BC FN FN 三.通讯协议原始指令日志Python脚本分析&#xff08;仅解析指令的PC版和…

反制攻击者-蚁剑低版本

目录 安装 攻击者获取防守方的权限 防守方反制攻击者 防守方获取攻击者的shell权限 安装 安装蚁剑2.0.7版本 链接&#xff1a;https://pan.baidu.com/s/1t40UxkZ2XuSWG6VCdGzvDw?pwd8888 提取码&#xff1a;8888 下载好后先打开Loader文件夹下的.exe文件&#xff0c;打…

常见cms漏洞之dedecms

DedeCMS是织梦团队开发PHP 网站管理系统&#xff0c;它以简单、易用、高效为特色&#xff0c;组建出各种各样各具特色的网站&#xff0c;如地方门户、行业门户、政府及企事业站点等。 下载地址请网上自行寻找 搭建方式选择php study 首先搭建环境 #前台http://localhost/dedecm…

医院患者押金原路退回系统源码,一键操作秒到账,无需设备收银设备 押金+身份证+电子押金单 解决方案

科技之力赋能医院押金原路退回&#xff0c;安全可靠账目清晰 一、医院押金管理必要性 以下是一些可用于销售软件、突出医院管理方便的优点总结&#xff1a; 1. 高效便捷的押金原路退回流程&#xff1a;利用科技之力&#xff0c;简化操作&#xff0c;节省时间和人力成本&#…

使用WPF调用Python进行图像灰度处理

1. 前言 在本文中&#xff0c;我们将通过WPF应用程序调用Python脚本进行图像灰度处理。我们将使用Python的OpenCV库来处理图像&#xff0c;并将其转换为灰度图像&#xff0c;然后通过WPF界面来启动Python进程并展示结果。 2. 准备工作 在开始之前&#xff0c;请确保系统已经…

PDF隐写思路

文章目录 使用工具技术细节小结 使用工具 工具&#xff1a;WPS、010Editor、WbStego 技术细节 步骤&#xff1a; 使用 WPS 查看文件&#xff0c;看是否能打开。 若不能打开则使用 010Editor 查看是否少了头文件等。 正常的 PDF 缺少头文件的 PDF 如果缺少头文件则使用 010…