【神经网络结构的组成】深入理解 转置卷积与转置卷积核

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀《深度学习理论直觉三十讲》_十二月的猫的博客-CSDN博客

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 

目录

1. 前言

2. 转置卷积

2.1 上采样的必要性

2.2 为什么要使用转置卷积

2.3 卷积运算

2.4 卷积运算多对一关系的思考

2.5 卷积核的本质(从矩阵卷积转为行卷积)

2.7 对转置卷积核的思考

3. 总结


1. 前言

        之前有机会看过这篇文章:【深度学习基础】深入理解 卷积与卷积核-CSDN博客的友友一定对卷积并不陌生,这也算是各种网络结构(RNN、LSTM等)的构成基础之一。因为网络结构研究的就是各种层(卷积、池化、全连接等)的组合方式。然后模型就是研究如何使用这些网络结构用来解决特定的问题。本篇文章的内容——转置卷积 就属于网络结构的组成部分,各种层结构

深度学习的三层次:

  • 卷积、池化、全连接等层是深度学习中最基础的东西。他们的不同组合方式产生了不同的网络结构。
  • 不同的网络结构对特征的提取是完全不同的。例如RNN结构能够提取上下文的信息适用于语言、时间等;CNN结构能够提取同一个图片从局部到整体的信息适用于计算机视觉上的使用;U-Net结构能够在提取特征的同时输出一个高分辨率的图片,因此适用于语义切割。
  • 在对问题充分理解后,对该问题进行数学建模。在这个模型中,我们需要定义数据来源、完整架构(包括一个或多个网络结构)、训练方式、损失函数等。例如:生成对抗网络模型、扩散模型等。

使用说明:三层次的内容层层递进:前者是后者的基础,后者是前者的递进。因此猫猫也将其分到两个专栏中,第一部分(深度学习中的层结构)作为【神经网络结构的组成】安排在《AI认知筑基三十讲》专栏中,用于初学者的学习;第二部分(网络结构、模型)分为【深度学习的骨架与脉搏】和【深度学习的灵魂】安排在《深度学习理论直觉三十讲》专栏中,用于深度学习爱好者学习。

2. 转置卷积

        明确一个点:转置卷积用于上采样

2.1 上采样的必要性

        使用神经网络生成图像通常涉及从低分辨率到高分辨率的上采样。因为神经网络理解一个图片的过程中就会用池化层、卷积层等下采样层将图片不断压缩,由此来获得更上层的信息(更抽象的图片信息)。理解之后想要再输出原本的图片+其他信息就需要用到上采样去处理了。下图就是一个上采样:

进行上采样操作的方法有多种:

  • 最近邻插值
  • 双线性插值
  • 双三次插值

        所有这些方法都涉及一些插值方法,我们必须在决定网络架构时选择它们。这就像手动特征工程,网络无法学习任何东西。

当然,最近大家都是用扩散模型或者对抗模型去完成超分辨率的工作(也就是把一个图片变更清晰)。使用生成模型去做上采样和使用插值或者转置卷积的方法是不同的,可以说生成模型

2.2 为什么要使用转置卷积

        如果我们希望网络学习如何以最佳方式进行上采样,可以使用转置卷积。它不使用预定义的插值方法。它具有可学习的参数。理解转置卷积概念很有帮助,因为重要的论文和项目都使用它,例如:

  • DCGAN 中的生成器采用随机采样值来生成全尺寸图像。
  • 语义分割在编码器中使用卷积层提取特征,然后在解码器中恢复原始图像大小,从而对原始图像中的每个像素进行分类。

转置卷积也称为:

  • 分数步长卷积
  • 反卷积

我将在本文中仅使用转置卷积这个词,但您可能会在其他文章中注意到其他名称。

2.3 卷积运算

        让我们用一个简单的例子来解释卷积运算的工作原理。假设我们有一个 4x4 矩阵,并应用一个 3 x 3 核的卷积运算,该核没有填充,步长为 1。如下所示,输出是一个 2x2 矩阵。

        卷积运算计算输入矩阵与核矩阵之间元素乘积之和。由于没有填充且步长为 1,我们只能执行四次。因此,输出矩阵为 2x2。

        这种卷积运算的关键点是输入值和输出值之间存在位置连通性。例如,输入矩阵的左上角值会影响输出矩阵的左上角值。我们使用 3 x 3 核将 9 个输入矩阵值连接到 1 个输出矩阵值。 卷积运算形成多对一关系 。记住这一点,稍后我们会用到它。

2.4 卷积运算多对一关系的思考

        现在,假设我们想反过来。我们想将一个矩阵中的一个值与另一个矩阵中的九个值关联起来。这是一种一对多的关系。这就像卷积运算中的逆向操作,也就是转置卷积的核心思想。

        例如,我们将一个 2x2 矩阵上采样为 4x4 矩阵,该操作保持 1 比 9 的关系。

        但是我们如何执行这样的操作呢? 其实也不难理解了,卷积操作依靠卷积核实现多对一操作,那么转置卷积自然也可以依靠转置卷积核实现一对多关系

2.5 卷积核的本质(从矩阵卷积转为行卷积)

        我们可以用矩阵来表示卷积运算。它是一个重新排列的核矩阵,因此我们可以使用矩阵乘法来进行卷积运算。

        但是,现在我说卷积操作可以转化为一维的方式展开,也就说一行代表一个卷积结果。原本卷积结果如下:

        现在想要转变为这样:

1. 首先必然要将输入的矩阵做变化:将输入矩阵(4x4)展平为列向量(16x1)

2. 将卷积核变化:将 3x3 内核重新排列成 4x16 矩阵,如下所示:

        因此就有下面的这种卷积:

上面操作就将矩阵卷积转为行卷积了!! 

2.7 对转置卷积核的思考

        看到上面对卷积核的变化,不难发现,卷积核的本质都可以转化为每一行的卷积。从矩阵卷积到行卷积的转变,让猫猫有了下面的思考:使用卷积矩阵,你可以从 16(4x4)变为 4(2x2),本质是因为卷积矩阵本身就是 4x16。然后,如果你有一个 16x4 矩阵,你可以从 4(2x2)变为 16(4x4)

        我们希望从 4 (2x2) 变为 16 (4x4)。因此,我们使用一个 16x4 矩阵。但这里还有一件事,我们需要检查一下是否满足,那就是是否保持 1 到 9 的关系。假设我们将卷积矩阵 C (4x16) 转置为 CT (16x4)。我们可以将 CT (16x4) 与列向量 (4x1) 进行矩阵乘法,生成一个输出矩阵 (16x1)。转置后的矩阵将一个值与输出中的 9 个值联系起来。

        由此可以看到,我们将一个较小的矩阵(2x2)上采样为一个较大的矩阵(4x4)。同时也保证了一个值和九个值之间的对应关系。注意:矩阵中的实际权重值并非来自原始卷积矩阵(这是一个可训练的参数,和卷积核一样)。重要的是,权重布局与卷积矩阵形状的转置相同

3. 总结

        转置卷积运算与常规卷积形成相同的连通性,但在转置的方向上,我们可以用它来进行上采样。此外,转置卷积中的权重是可学习的。因此,我们不需要预先定义插值方法。虽然它被称为转置卷积,但这并不意味着我们采用某个现有的卷积核并对其进行转置。重点在于,与标准卷积矩阵相比,转置卷积对输入和输出之间的关联进行了反向处理(一对多关联,而非多对一关联)。因此,转置卷积并非真正的卷积。但我们可以用卷积来模拟转置卷积。我们通过在输入矩阵的值之间添加零来对输入进行上采样,这样直接卷积就能产生与转置卷积相同的效果。你可能会找到一些文章以这种方式解释转置卷积。然而,由于需要在卷积之前添加零来对输入进行上采样,因此效率较低。

        简单点来说,转置卷积和卷积类似,只是提供一个形式固定的模板,核内部的值是多少是通过学习得到的。特别地:转置卷积会造成生成图像的棋盘格伪影。因此建议先进行插值方法,然后再进行转置卷积操作,以减少此类问题

【如果想学习更多深度学习知识,可以订阅热门专栏】

  • 《AI认知筑基三十讲》
  • 《PyTorch科研加速指南:即插即用式模块开发》
  • 《深度学习理论直觉三十讲》

  如果想要学习更多人工智能的知识,大家可以点个关注并订阅,持续学习、天天进步你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~

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

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

相关文章

CSS高度坍塌?如何解决?

一、什么是高度坍塌? 高度坍塌(Collapsing Margins)是指当父元素没有设置边框(border)、内边距(padding)、内容(content)或清除浮动时,其子元素的 margin 会…

Web前端开发——格式化文本与段落(上)

一、学习目标 网页内容的排版包括文本格式化、段落格式化和整个页面的格式化,这是设计个网页的基础。文本格式化标记分为字体标记、文字修饰标记。字体标记和文字修饰标记包括对于字体样式的一些特殊修改。段落格式化标记分为段落标记、换行记、水平分隔线标记等。…

关于PHP开源CMS系统ModStart的详细介绍及使用指南

关于PHP开源CMS系统ModStart的详细介绍及使用指南: 🔍 ModStart是什么? 基于Laravel框架开发的模块化CMS系统采用Apache 2.0 开源协议,完全免费可商用特别适合需要快速搭建企业级网站/管理系统的开发者 🚀 核心优势…

TCP标志位抓包

说明 TCP协议的Header信息,URG、ACK、PSH、RST、SYN、FIN这6个字段在14字节的位置,对应的是tcp[13],因为字节数是从[0]开始数的,14字节对应的就是tcp[13],因此在抓这几个标志位的数据包时就要明确范围在tcp[13] 示例1…

RK3588S开发板将SPI1接口改成GPIO

参考官方教程:ROC-RK3588S-PC 一.基本知识: 1.GPIO引脚计算: ROC-RK3588S-PC 有 5 组 GPIO bank:GPIO0~GPIO4,每组又以 A0~A7, B0~B7, C0~C7, D0~D7 作为编号区分,常用以下公式计算引脚:GPIO…

Java 设计模式:适配器模式详解

Java 设计模式:适配器模式详解 适配器模式(Adapter Pattern)是一种结构型设计模式,它通过将一个类的接口转换为客户端期望的另一个接口,使原本不兼容的类能够协同工作。适配器模式就像现实生活中的电源适配器&#xf…

python manimgl数学动画演示_微积分_线性代数原理_ubuntu安装问题[已解决]

1.背景 最近调研python opencv, cuda加速矩阵/向量运算, 对于矩阵的线性变换, 秩, 转秩, 行列式变化等概概念模糊不清. 大概课本依旧是天书, 于是上B站搜索线性代数, 看到 3Blue1Brown 线性变换本质 视频, 点击观看. 惊为天人 --> 豁然开朗 --> 突然顿悟 --> 开心不已…

Git 学习笔记

这篇笔记记录了我在git学习中常常用到的指令&#xff0c;方便在未来进行查阅。此篇文章也会根据笔者的学习进度持续更新。 网站分享 Git 常用命令大全 Learn Git Branching 基础 $ git init //在当前位置配置一个git版本库 $ git add <file> //将文件添加至…

Dynamics365 ExportPdfTemplateExportWordTemplate两个Action调用的body构造

这两天在用ExportPdfTemplate做pdf导出功能时&#xff0c;遇到了如下问题InnerException : Microsoft.OData.ODataException: An unexpected StartArray node was found when reading from the JSON reader. A PrimitiveValue node was expected. 我的场景是使用power automate…

经典算法 判断一个图是不是树

判断一个图是不是树 问题描述 给一个以0 0结尾的整数对列表&#xff0c;除0 0外的每两个整数表示一条连接了这两个节点的边。假设节点编号不超过100000大于0。你只要判断由这些节点和边构成的图是不是树。是输出YES&#xff0c;不是输出NO。 输入样例1 6 8 5 3 5 2 6 4 5…

【嵌入式八股2】C++:STL容器与算法

1. STL常见容器及其内部实现的数据结构 序号 名称 描述 存储结构 常用方法和操作 1vector动态分配的数组顺序数组&#xff08;array&#xff09;v.push_back(), v.pop_back(), v.insert(), v.erase(), v.capacity(), v.size(), v.at(idx), v.front(), v.back()2list双向链表离…

vmcore分析锁问题实例(x86-64)

问题描述&#xff1a;系统出现panic&#xff0c;dmesg有如下打印&#xff1a; [122061.197311] task:irq/181-ice-enp state:D stack:0 pid:3134 ppid:2 flags:0x00004000 [122061.197315] Call Trace: [122061.197317] <TASK> [122061.197318] __schedule0…

在Apple Silicon上部署Spark-TTS:四大核心库的技术魔法解析!!!

在Apple Silicon上部署Spark-TTS&#xff1a;四大核心库的技术魔法解析 &#x1f680; &#xff08;M2芯片实测&#xff5c;Python 3.12.9PyTorch 2.6.0全流程解析&#xff09; 一、核心库功能全景图 &#x1f50d; 在Spark-TTS的部署过程中&#xff0c;pip install numpy li…

leetcode03 -- 武汉旅游查询系统

武汉旅游查询系统 1 界面展示 1.首页地图界面 2.查找功能 在查找框内输入查找的景点名称 查找到的景点在地图上进行定位,右侧展示景点的详细信息。 3.添加景点功能 在地图上点击某个位置,系统弹出一个输入框供用户填写景点的名称和描述。 在弹出的输入框中输入景点名…

玩机进阶教程----MTK芯片设备刷机导致的死砖修复实例解析 连电脑毫无反应 非硬件问题

在高通芯片机型中,我们可以通过短接主板测试点来激活高通芯片特有的9008底层端口来刷写救砖固件。但通常MTK芯片类的设备联机电脑即可触发深刷模式。但有些例外的情况会导致链接电脑毫无反应。遇到类似故障的友友可以参阅此博文尝试解决。 通过博文了解 1💝💝💝-----实…

09-设计模式企业场景 面试题-mk

文章目录 1.工厂(方法)模式1.1.简单工厂模式(不是设计模式,是编程习惯)1.2.工厂方法模式(企业开发中最常见)1.3.抽象工厂模式2.策略模式2.1.登录案例(工厂模式+策略模式)3.责任链设计模式4.单点登录怎么是实现的?5.权限认证是如何实现的6.上传数据的安全性你们怎么控…

BUUCTF-Web(1-20)

目录 一.SQL注入 (1)[极客大挑战 2019]EasySQL 万能密码 (7)[SUCTF 2019]EasySQL 堆叠注入 解一&#xff1a; 解二&#xff1a; (10)[强网杯 2019]随便注 堆叠注入 解一&#xff1a; 解二&#xff1a; 解三&#xff1a; (8)[极客大挑战 2019]LoveSQL 联…

软件包安装管理Gitlab

官方提供了非常详尽的系统及自动化脚本安装教程 Gitlab官网下载地址&#xff1a;https://gitlab.cn/install/ 1、安装配置 今天我们说一下包安装管理&#xff0c;这样方便我们自己更精确的制定符合我们自己需要的Gitlab仓库 配置&#xff1a;ubuntu2004(focal) 4C8G 下载程…

hadoop执行sqoop任务找不到jar

sqoop:1.4.7 hadoop:3.4.1 数据:oracel-hdfs 2025-04-15 16:57:00,850 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7 2025-04-15 16:57:00,901 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead. 2025-04-15 …

空地机器人在复杂动态环境下,如何高效自主导航?

随着空陆两栖机器人(AGR)在应急救援和城市巡检等领域的应用范围不断扩大&#xff0c;其在复杂动态环境中实现自主导航的挑战也日益凸显。对此香港大学王俊铭基于阿木实验室P600无人机平台自主搭建了一整套空地两栖机器人&#xff0c;使用Prometheus开源框架完成算法的仿真验证与…