深度学习入门(二十五)卷积神经网络——多输入多输出通道

news2024/11/27 10:26:04

深度学习入门(二十五)卷积神经网络——多输入多输出通道

  • 前言
  • 卷积神经网络——填充和步幅
    • 课件
      • 多个输入通道
      • 多个输出通道
      • 多个输入和输出通道
      • 1×1卷积层
      • 二维卷积层
      • 总结
    • 教材
      • 1 多输入通道
      • 2 多输出通道
      • 3 1×1卷积层
      • 4 小结

前言

核心内容来自博客链接1博客连接2希望大家多多支持作者
本文记录用,防止遗忘

卷积神经网络——填充和步幅

课件

多个输入通道

1、彩色图像可能有RGB三个通道
2、转换为灰度会丢失信息

每个通道都有一个卷积核,结果是所有通道卷积结果的和
在这里插入图片描述

输入 X : c i × n h × n w \mathbf{X}:c_i \times n_h \times n_w X:ci×nh×nw
W : c i × k h × k w \mathbf{W}:c_i \times k_h \times k_w W:ci×kh×kw
输出 Y : m h × m w \mathbf{Y}:m_h \times m_w Y:mh×mw
Y = ∑ i = 0 c i X i , : , : ⋆ W i , : , : \mathbf{Y=\sum_{i=0}^{c_i}X_{i,:,:}\star W_{i,:,:}} Y=i=0ciXi,:,:Wi,:,:

多个输出通道

无论有多少输入通道,到目前为止我们只用到单输出通道
我们可以有多个三维卷积核,每个核生成一个输出通道

输入 X : c i × n h × n w \mathbf{X}:c_i \times n_h \times n_w X:ci×nh×nw
W : c o × c i × k h × k w \mathbf{W}:c_o \times c_i \times k_h \times k_w W:co×ci×kh×kw
输出 Y : c o × m h × m w \mathbf{Y}:c_o \times m_h \times m_w Y:co×mh×mw
Y i , : , : = ∑ i = 0 c i X i , : , : ⋆ W i , : , : f o r i = 1 , . . . , c o \mathbf{Y_{i,:,:}=\sum_{i=0}^{c_i}X_{i,:,:}\star W_{i,:,:}} \qquad for\quad i=1,...,c_o Yi,:,:=i=0ciXi,:,:Wi,:,:fori=1,...,co

多个输入和输出通道

每个输出通道可以识别特定模式。
输入通道核识别并组合输入中的模式

1×1卷积层

k h = k w = 1 k_h=k_w=1 kh=kw=1是一个受欢迎的选择。它不识别空间模式,只是融合通道。
在这里插入图片描述相当于输入形状为 n h n w × c i n_hn_w\times c_i nhnw×ci,权重为 c o × c i c_o\times c_i co×ci的全连接层

二维卷积层

在这里插入图片描述

总结

1、输出通道数是卷积层的超参数
2、每个输入通道有独立的二维卷积核,所有通道结果相加得到一个输出通道结果
3、每个输出通道有独立的三维卷积核

教材

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

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

1 多输入通道

当输入包含多个通道时,需要构造一个与输入数据具有相同输入通道数的卷积核,以便与输入数据进行互相关运算。假设输入的通道数为 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的二维张量。

然而,当时,我们卷积核的每个输入通道将包含形状为的张量。将这些张量连结在一起可以得到形状为的卷积核。由于输入和卷积核都有个通道,我们可以对每个通道输入的二维张量和卷积核的二维张量进行互相关运算,再对通道求和(将的结果相加)得到二维张量。这是多通道输入和多输入通道卷积核之间进行二维互相关运算的结果。

下图中,我们演示了一个具有两个输入通道的二维互相关运算的示例。阴影部分是第一个输出元素以及用于计算这个输出的输入和核张量元素: ( 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

def corr2d_multi_in(X, K):
    # 先遍历“X”和“K”的第0个维度(通道维度),再把它们加在一起
    return sum(d2l.corr2d(x, k) for x, k in zip(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)

输出:

tensor([[ 56.,  72.],
        [104., 120.]])

2 多输出通道

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

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。在互相关运算中,每个输出通道先获取所有输入通道,再以对应该输出通道的卷积核计算出结果。

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

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

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

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

输出:

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

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

corr2d_multi_in_out(X, K)

输出:

tensor([[[ 56.,  72.],
         [104., 120.]],

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

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

3 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卷积的唯一计算发生在通道上。

下图展示了使用 1 × 1 1\times 1 1×1卷积核与3个输入通道和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卷积。 请注意,我们需要对输入和输出的数据形状进行调整。

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))
    K = K.reshape((c_o, c_i))
    # 全连接层中的矩阵乘法
    Y = torch.matmul(K, X)
    return Y.reshape((c_o, h, w))

当执行 1 × 1 1\times 1 1×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)
assert float(torch.abs(Y1 - Y2).sum()) < 1e-6

4 小结

1、多输入多输出通道可以用来扩展卷积层的模型。
2、当以每像素为基础应用时, 1 × 1 1\times 1 1×1卷积层相当于全连接层。
3、 1 × 1 1\times 1 1×1卷积层通常用于调整网络层的通道数量和控制模型复杂性

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

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

相关文章

【Linux】腾讯云服务器Linux环境搭载

作者&#xff1a;一个喜欢猫咪的的程序员 专栏&#xff1a;《Linux》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 Linux介绍&#xff1a; 我们本篇博客以腾讯云的Linux系统搭载为例&#xf…

SSM详解6:请求转发和请求重定向的区别

1、定义不同 请求转发&#xff08;forward&#xff09;&#xff1a; 是发生在服务器内部程序&#xff0c;当服务端程序收到一个请求&#xff0c;会将该请求转发给另一个服务端&#xff08;目的地址&#xff09;&#xff0c;再将目的地址的响应返回给客户端。而客户端对该过程…

前端如何锁定项目的node和pnpm版本

前端如何锁定项目的node和pnpm版本背景如何锁定Node版本的管理背景 项目组成员Node.js、npm、yarn、pnpm等版本不统一。造成编译出错&#xff0c;开发不方便&#xff0c;工作效率低下等问题。 如何锁定 通过修改package.json&#xff0c;指定engines字段&#xff0c;锁定前端所…

初始C++(一)---命名空间、输入输出、缺省参数

目录 1.命名空间 定义命名空间 using 指令 命名空间的嵌套 2、C输入输出 标准输出流&#xff08;cout&#xff09; 标准输入流&#xff08;cin&#xff09; 3.缺省参数 1.命名空间 定义命名空间 假设这样一种情况&#xff0c;当一个班上有两个名叫张三 的学生时&…

零基础入门网络安全,收藏这篇不迷茫【2022最新】

前言 最近收到不少关注朋友的私信和留言&#xff0c;大多数都是零基础小友入门网络安全。其实看过的铁粉都知道&#xff0c;之前的文里是有过推荐过的。新来的小友可能不太清楚&#xff0c;这里就系统地叙述一遍。 01.简单了解一下网络安全 说白了&#xff0c;网络安全就是指…

网络面试-ox07http中的keep-alive以及长/短连接

非Keep-Alive: 早起HTTP1.0, 浏览器发起http请求需要与服务器建立新的TCP连接&#xff0c;请求处理后连接立即关闭。 缺点&#xff1a;每个这样的连接&#xff0c;客户端与服务器都要分配TCP的缓冲区和变量&#xff0c;这给服务器带来严重的负担。 Keep-Alive: 默认持久连接&am…

成为Linux大神——必须要具备的基本技能!

要努力&#xff0c;但不要着急&#xff0c;繁花锦簇&#xff0c;硕果累累&#xff0c;都需要过程&#xff01; 目录 1.Linux软件包管理器yum 2.Linux编辑器—vim的使用 2.1vim的基本概念&#xff1a; 2.2vim的基本操作&#xff1a; 2.3vim正常模式命令集&#xff1a; 2.4vim底行…

vue3 + ts: layout布局

一、理解&#xff1a;layout layout&#xff0c;语义&#xff1a;布局&#xff0c;设计&#xff0c;结合前端vue项目&#xff0c;我理解为这样的定义&#xff1a;页面级别的组件&#xff0c;框架级别的组件&#xff0c;基础布局组件&#xff0c;基础设计 关键词&#xff1a;组…

SEO外链专员,SEO专员,SEO编辑,每天工作量给他们怎么安排?

企业想要做好网站排名&#xff0c;想要让网站在搜索引擎中获得更高的曝光度&#xff0c;就需要对网站进行整体优化&#xff0c;而整体优化就包括站内优化&#xff0c;以及站外优化&#xff0c;只有这样才能让网站关键词获得的更多的排名&#xff0c;从而也就能够获得更多的流量…

堪称经典,一个非常适合初学者的机器学习实战案例

大家好&#xff0c;今天我给大家介绍一个非常适合新手的机器学习实战案例。 这是一个房价预测的案例&#xff0c;来源于 Kaggle 网站&#xff0c;是很多算法初学者的第一道竞赛题目。 该案例有着解机器学习问题的完整流程&#xff0c;包含EDA、特征工程、模型训练、模型融合等…

轻量级简约仪表板Dasherr

什么 Dasherr &#xff1f; 这是老苏在逛 reddit 时偶然发现的&#xff0c;作者刚发布&#xff0c;这是一款全新的轻量级仪表板。 官方目前没有提供 docker&#xff0c;但本身的安装方法并不复杂&#xff0c;只要将代码下载后&#xff0c;将 www 目录中的文件放入到 Web 服务器…

蓝桥杯入门即劝退(五)跑断腿的小蓝

九层之台&#xff0c;起于垒土&#xff0c;你我皆是垒土人✔ 愿我的文章对你有所帮助&#xff01; 欢迎关注点赞评论&#xff0c;共同学习&#xff0c;共同进步&#xff01; 一、题目&#xff08;填空题&#xff09; 小蓝每天都锻炼身体。 正常情况下&#xff0c;小蓝每天跑 …

阿里测试8年,从5K到40K,这178天的心酸只有我自己知道···

从事测试工作已8年有余了&#xff0c;今天想聊一下自己刚入门时和现在的今昔对比&#xff0c;虽然现在也没什么大成就&#xff0c;只能说笑谈一下自己的测试生涯。 技术栈的变化 刚开始是做的开发&#xff0c;也是做了好几年的开发&#xff0c;后面软件测试的风潮开始了&…

前端工程师的摸鱼日常(17)

声明&#xff1a;全文纯属个人想法&#xff0c;无论提到什么&#xff0c;都无贬低和抬高之意&#xff0c;也没有对当今直正者感到不满。如果有部分内容与我思想不一&#xff0c;或戳于谁之痛处&#xff0c;可以跳过浏览&#xff0c;就当我在讲故事或者笑话。如果内容侵犯到XXX的…

CH34X linux驱动安装,参考代码例程

想用USB转I2C工具调试个I2C接口芯片未果。 驱动安装参考下面内容&#xff1a; 1. 使用的系统环境 本文使用Ubuntu 20.04 LTS版本Linux系统为测试环境。 2. 使用到的工具软件介绍 Linux系统下编译CH365/CH367的驱动使用到的工具主要有gcc和make&#xff0c;版本如下所示&…

“清华女神”回国,赤子之心,如愿以偿

目录1、女神科学家颜宁是谁2、颜宁在深圳人才论坛最新演讲&#xff0c;以及招聘邮箱3、颜宁微博回应4、结论与展望最近女神科学家颜宁回国了&#xff0c;整个科学界和中国都沸腾了&#xff0c;也上了热搜&#xff0c;成了热门话题&#xff0c;越来越多的海归精英选择回国 1、…

LeetCode 每日一题——816. 模糊坐标

1.题目描述 816. 模糊坐标 我们有一些二维坐标&#xff0c;如 “(1, 3)” 或 “(2, 0.5)”&#xff0c;然后我们移除所有逗号&#xff0c;小数点和空格&#xff0c;得到一个字符串S。返回所有可能的原始字符串到一个列表中。 原始的坐标表示法不会存在多余的零&#xff0c;所…

5_会话管理实现登录功能

一 会话管理登录功能 前置了解 初识cookie 如下图,浏览器初次访问服务器时,服务器生成数据将数据存放在浏览器的cookie中,当浏览器再次访问服务器时将会携带该cookie,此时服务器就可以确定该浏览器的身份了。 session的使用 如下图,session的实现需要借助cookie,不同cookie的是…

荧光标记氨基酸:荧光标记L-苯丙氨酸乙酯盐酸盐,L-phenylalanine ethylester labeled

产品名称&#xff1a;荧光标记L-苯丙氨酸乙酯盐酸盐&#xff0c;L-phenylalanine ethylester labeled L-苯丙氨酸乙酯盐酸盐是化学物质&#xff0c;分子式是C11H16NO2。别名L-苯基丙氨酸乙酯盐酸盐&#xff0c;熔点: 154-157&ordm;C&#xff0c;比旋光度: 33.7&ordm;(…

使用myCobot 280机械臂校准OAK智能深度相机

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手…