深度学习——卷积层的输入输出多通道(笔记)+代码

这篇具有很好参考价值的文章主要介绍了深度学习——卷积层的输入输出多通道(笔记)+代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一 输入通道

1.多个输入通道

①彩色图像有RGB(红绿蓝组成)三个通道

②转换为灰度会丢失信息 灰度一个通道

2.多个通道输出的结果:只有一个输出

每个通道都有对应的卷积核,输出的结果是所有通道卷积核的和

【演示】二个通道的输出结果

深度学习——卷积层的输入输出多通道(笔记)+代码

输出结果某个值的计算:

深度学习——卷积层的输入输出多通道(笔记)+代码

 3.输入多通道

①输入X:深度学习——卷积层的输入输出多通道(笔记)+代码

 ②卷积核W:深度学习——卷积层的输入输出多通道(笔记)+代码

 ③输出Y:深度学习——卷积层的输入输出多通道(笔记)+代码

单通道。不管输入的是多个通道,每个通道都有对应的卷积核,输出通道的结果是所有卷积核的和。

深度学习——卷积层的输入输出多通道(笔记)+代码

【比如】:下图的输入通道是2,所以对应2个卷积核(一组),输出结果是单通道。

那么,如何让结果输出多个通道呢?下图是2个卷积核是一组,再加上一组(2个)卷积核。输出就是两个了。每组卷积核提取的特征不一样。结果也就不一样

 深度学习——卷积层的输入输出多通道(笔记)+代码

①无论输入通道有多少个,目前只用到单通道输出

②怎样让输出有多个通道呢?可以有多个三维卷积核(多个组),每个核生成一个输出通道

深度学习——卷积层的输入输出多通道(笔记)+代码

 深度学习——卷积层的输入输出多通道(笔记)+代码

 

Ci:输入通道的层数

Co:输出通道的层数

为了提取不同的特征,两者没有相关性。

我的猜测是,比如有一个图片,加上一个滤镜(一组卷积核),是朦胧的。加上另一个滤镜(一组卷积核)是黑白的。所以输出两个图片:朦胧。黑白。

4.多输出的作用:

①每个输出通道可以识别特定的模式

输入一个猫:深度学习——卷积层的输入输出多通道(笔记)+代码

 输出的6个通道模式:深度学习——卷积层的输入输出多通道(笔记)+代码

 ②把输出的6个通道传入,此刻的输入通道识别并组合输入中的各个模式【组合模式识别】

5: 1*1的卷积层(受欢迎的卷积核)

因为只识别一个像素点,不去看像素周围的像素是多少。所以不识别空间模式。

通过一组卷积核,把输入的三个通道的信息对应像素进行加权和,得到一个输出通道。所以是融合通道。

深度学习——卷积层的输入输出多通道(笔记)+代码

 【等价于】把输入的三个通道拉成一个向量的全连接层,不考虑空间信息

6. 二维卷积层:

深度学习——卷积层的输入输出多通道(笔记)+代码

 深度学习——卷积层的输入输出多通道(笔记)+代码

 

【总结】

①输出通道数是卷积层的超参数

②每个输入通道有独立的二维卷积核。所有通道结果相加得到一个输出的通道的结果

③每个输出通道有独立的三维卷积核。


【代码实现】

1.多输入通道:  输入多个通道验证卷积核1*1等价于全连接层:

import torch
from d2l import torch as d2l


# 多输入通道
def corr2d_multi_in(X, K):
    '''先遍历X和K的第0个维度,再把他们加在一起'''
    '''zip函数用于将可迭代的对象作为参数,将对象的对应的元素打包成一个个元组,返回元组组成的列表'''
    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.]])
'''

2.多输出通道

def corr2d_multi_in_out(X, K):
    '''
    迭代“K”的第0个维度,每次都对输入“X”执行互相关运算。
    最后将所有结果都叠加在一起
    torch.stack()沿着一个新维度对输入张量连接,序列中的所有张量一个形状
    '''
    return torch.stack([corr2d_multi_in(X, k) for k in K], 0)

3.构造几组卷积核: 3组卷积核,有三个输出

K = torch.stack((K, K + 1, K + 2), 0)
print(K)
print(K.shape)  # torch.Size([3, 2, 2, 2])

【输出K】

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])

4.验证:实现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))

【验证 卷积的结果 和 全连接层 相减为0 说明相等】文章来源地址https://www.toymoban.com/news/detail-466573.html

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)
print(float(torch.abs(Y1 - Y2).sum()) < 1e-6)  # True =0相等。

到了这里,关于深度学习——卷积层的输入输出多通道(笔记)+代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习CV方向学习笔记5 —— 通道注意力机制

    目录 1 问题:MobileNet 中的注意力机制 2 SE 通道注意力机制 2.1 SE 通道注意力机制的定义与作用 2.2 SE过程: Squeeze + Excitation + Scale 3 其他通道注意力机制 4 参考链接 问题描述: MobileNet 中使用了通道注意力机制,是如何实现的?CNN中还有哪些 Attention? 2.1 SE 通道注意力机制的定义

    2024年02月08日
    浏览(36)
  • 【深度学习】ONNX 模型文件修改节点的名称,修改输入名称,修改输出名称

    想要修改onnx模型文件的节点名称,要么在最初的pytorch代码里去改,要么就直接在onnx模型文件里改。 而我这里直接在onnx模型文件改,我有一个onnx文件,输出节点的名字是这样的: 这不改就看着真难受,那么就用python改: 改完后: 其实修改其他节点的名称也可以这样去做,

    2024年02月15日
    浏览(30)
  • C语言学习笔记:输入&输出

    ✨博文作者:烟雨孤舟 💖 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 ✍️ 笔记简介:作为大数据爱好者,以下是个人总结的学习笔记,如有错误,请多多指教! 目录 scanf和printf gets和puts getchar和putchar printf是格式化的输出函数,scanf是C语言的输

    2024年02月09日
    浏览(35)
  • C++学习笔记——输入、输出和文件

    目录 一、标准输入输出 2.1下面是它们的基本用法 解释 二、格式化输入输出 2.2下面是一个示例 解释 三、文件读写 3.3下面是一个文件读写的示例 解释 四、异常处理和错误检测 4.1下面是一个示例 解释 五、一个实例代码 5.1如何读取 CSV 文件,并计算每一列的平均值 上一篇文

    2024年02月01日
    浏览(33)
  • 学习笔记:深度学习(3)——卷积神经网络(CNN)理论篇

    学习时间:2022.04.10~2022.04.12 CNN(Convolutional Neural Networks, ConvNets, 卷积神经网络)是神经网络的一种,是理解图像内容的最佳学习算法之一,并且在图像分割、分类、检测和检索相关任务中表现出色。 3.1.1 什么是CNN? CNN是一种带有卷积结构的前馈神经网络, 卷积结构 可以减少

    2024年02月03日
    浏览(73)
  • MSP432学习笔记2——GPIO输入输出

    今日继续更新我的MSP432速通笔记 新的硬件芯片到手,脑子是空白的,板子是漆黑的,诺想要缓解这份尴尬,便来点灯吧! 今日主要速通MSP432的GPIO输入输出功能,目标是连接矩阵键盘与LED流水灯模块 到MSP432P401R开发板上进行练习。 文章 附上原理图与代码 目录 ​编辑 基础知

    2024年02月16日
    浏览(29)
  • 动手学深度学习—卷积神经网络(原理解释+代码详解)

    多层感知机对图像处理是百万维度,模型不可实现。 如果要在图片中找到某个物体,寻找方法应该和物体位置无关。 适合 计算机视觉 的神经网络架构: 平移不变性 :不管检测对象出现在图像中的哪个位置,神经网络前几层应该对相同图像区域有相似的反应。 局部性 :神

    2024年02月14日
    浏览(38)
  • stm32学习笔记-3GPIO通用输入输出口

    注:笔记主要参考B站 江科大自化协 教学视频“STM32入门教程-2023持续更新中”。 注:工程及代码文件放在了本人的Github仓库。 GPIO (General Purpose Input Output) 通用输入输出口 可配置为8种输入输出模式。 引脚电平范围为0V~3.3V ,部分引脚可容忍5V(图1-6中IO口电平为FT标识的)

    2024年02月15日
    浏览(38)
  • Java学习笔记之----I/O(输入/输出)一

            在变量、数组和对象中存储的数据是暂时存在的,程序结束后它们就会丢失。想要永久地存储程序创建的数据,就需要将其保存在磁盘文件中(就是保存在电脑的C盘或D盘中),而只有数据存储起来才可以在其他程序中使用它们。Java的I/O技术可以将数据保存到文本文件

    2024年02月10日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包