3.9.转置卷积

news2024/10/1 1:30:08

转置卷积

​ 目前为止,在卷积神经网络层中,通常会减少下采样输入图像的空间维度(高和宽)。然而如果输入和输出图像的空间维度相同,在以像素级分类的语义分割中将会很方便:输出像素所处的通道维可以保有输入像素在同一位置上的分类结果。

​ 为了实现这一点,可以使用另一种类型的卷积神经网络层,它可以增加上采样中间层特征图的空间维度,用于逆转下采样导致的空间尺寸减少。

1.基本操作

在这里插入图片描述

​ 假设有一个 n h × n w n_h\times n_w nh×nw的输入张量和一个 k h × k w k_h\times k_w kh×kw的卷积核,一步幅为1滑动卷积核窗口,每行 n w n_w nw次,每列 n h n_h nh次,共产生 n h n w n_hn_w nhnw个结果,每个中间结果都是 ( n h + k h ) − 1 × ( n w + k w − 1 ) (n_h+k_h)-1\times(n_w+k_w-1) (nh+kh)1×(nw+kw1)的张量,初始化为0。

​ 输入张量中的每个元素乘以卷积核,得到一个 k h × k w k_h\times k_w kh×kw张量,替换中间张量的一部分。最后所有中间结果相加得到最终结果。
Y [ i : i + h , j : j + w ] + = X [ i , j ] ⋅ K Y[i:i+h,j:j+w] += X[i,j]\cdot K Y[i:i+h,j:j+w]+=X[i,j]K

为什么称为转置?

​ 对于卷积 Y = X @ W Y =X@ W Y=X@W,可以对 W W W构造一个 V V V,使得卷积等价于矩阵乘法 Y ′ = V X ′ Y' = VX' Y=VX,这里 Y ′ , X ′ Y',X' Y,X Y , X Y,X Y,X对应的向量版本。

​ 也就是说如果 Y ′ Y' Y长为 n n n, X ′ X' X长为 m m m,则 V V V的形状为 n × m n\times m n×m,转置之后 V T V^T VT的形状变为 m × n m\times n m×n,则X和Y的形状也交换了。

​ 那么转置卷积等价于 Y ′ = V T X ′ Y'=V^T X' Y=VTX,如果卷积将输入从 ( h , w ) (h,w) (h,w)变成了 ( h ′ , w ′ ) (h',w') (h,w),同样超参数的转置卷积则从 ( h ′ , w ′ ) (h',w') (h,w)变成 ( h , w ) (h,w) (h,w)

import torch
from torch import nn
from d2l import torch as d2l

def trans_conv(X, K):
    h, w = K.shape
    Y = torch.zeros((X.shape[0] + h - 1, X.shape[1] + w - 1))
    for i in range(X.shape[0]):
        for j in range(X.shape[1]):
            Y[i: i + h, j: j + w] += X[i, j] * K
    return Y


X = torch.tensor([[0.0, 1.0], [2.0, 3.0]])
K = torch.tensor([[0.0, 1.0], [2.0, 3.0]])
print(trans_conv(X, K))

X, K = X.reshape(1, 1, 2, 2), K.reshape(1, 1, 2, 2)
# nn库自带的转置卷积函数,超参数很明显
tconv = nn.ConvTranspose2d(1, 1, kernel_size=2, bias=False)
tconv.weight.data = K
print(tconv(X))

2.填充、步幅和多通道

2.1 填充

​ 与常规卷积不同,在转置卷积中,填充被应用于的输出(常规卷积将填充应用于输入)。 例如,当将高和宽两侧的填充数指定为1时,转置卷积的输出中将删除第一和最后的行与列。

'''填充、步幅和多通道'''
# 填充是对输出进行填充
tconv = nn.ConvTranspose2d(1, 1, kernel_size=2, padding=1, bias=False)
tconv.weight.data = K
print('填充:',tconv(X))

在这里插入图片描述

​ 输出反而变小了

2.2 步幅

在这里插入图片描述

tconv = nn.ConvTranspose2d(1, 1, kernel_size=2, stride=2, bias=False)
tconv.weight.data = K
print('步幅为2:',tconv(X))

2.3 多输入输出通道

​ 与常规卷积类似的,假设输入有 c i c_i ci个通道,且转置卷积为每个输入通道分配了一个 k h × k w k_h\times k_w kh×kw的卷积张量,指定多个输出通道时,每个输出通道将有一个 c i × k h × k w c_i\times k_h\times k_w ci×kh×kw的卷积核

​ 如果我们将X带入卷积层f来输出 Y = f ( x ) Y=f(x) Y=f(x),并创建一个与f具有相同的超参数、但输出通道数量是X中通道数的转置卷积层 g g g,那么 g ( Y ) g(Y) g(Y)的形状将与 X X X相同:

'''多输入输出通道'''
X = torch.rand(size=(1, 10, 16, 16))
conv = nn.Conv2d(10, 20, kernel_size=5, padding=2, stride=3)
tconv = nn.ConvTranspose2d(20, 10, kernel_size=5, padding=2, stride=3)
tconv(conv(X)).shape == X.shape # True

3.与矩阵乘法的联系

13.10. 转置卷积 — 动手学深度学习 2.0.0 documentation (d2l.ai)

之前有写过了,大概就是卷积操作可以使用矩阵乘法实现。

4.关于填充、步幅的补充

在这里插入图片描述

​ 输入矩阵填充,核矩阵上下左右翻转后做正常卷积(填充0、步幅1)

在这里插入图片描述

在这里插入图片描述

​ s=2时,行和列之间插入一行或已列

​ p=0.则填充k-1=2-1=1。

形状换算

​ 输入高(宽)为n,核k,填充p,步幅s,那么对于转置卷积:
n ′ = s n + k − 2 p − s n'=sn +k-2p-s n=sn+k2ps
​ 如果想让高宽成倍增加,那么 k = 2 p + s k=2p+s k=2p+s

​ 回忆一下,对于卷积:
n ′ = ⌊ ( n − k − 2 p + s ) / s ⌋ → n ≥ s n ′ + k − 2 p − s n'=\lfloor(n-k-2p+s)/s\rfloor \rightarrow n\ge sn'+k-2p-s n=⌊(nk2p+s)/snsn+k2ps
​ 转置卷积不是反卷积,反卷积是指卷积的逆运算:
i f   Y = c o n v ( X , K ) , t h e n   X = d e c o n v ( Y , K ) if\ Y=conv(X,K), then\ X=deconv(Y,K) if Y=conv(X,K),then X=deconv(Y,K)
​ 转置卷积本质上依旧是卷积,只是矩阵形式上的变化相反。

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

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

相关文章

Linux应用编程——实现SPI通信(基于百问网6ULL开发板)

1.SPI简介 SPI 通常指串行外设接口(Serial Peripheral Interface),它是一种高速、全双工、同步的通信总线。 SPI 总线在芯片的管脚上只占用四根线,节约了芯片的管脚,也为 PCB 的布局节省了空间。这四根线分别是&…

大模型学习笔记 - InstructGPT中的微调与对齐

LLM 微调 之 InstructGPT中的微调与对齐 LLM 微调 之 InstructGPT中的微调与对齐 技术概览 InstructGPT中的微调与对齐 大体步骤标注数据量模型训练 1. SFT 是如何训练的2. Reward Model是如何训练的3. RLHF 是如何训练的具体讲解RLHF 的loss 函数 模型效果参考链接&#xf…

数据结构实验报告-图

桂 林 理 工 大 学 实 验 报 告 一、实验名称&#xff1a; 实验7 图 二、实验内容&#xff1a; 1.已知一个有向图的顶点集V和边集E分别为:V (0,1,2,3,4,5,6,7,8};E{<0,2>&#xff0c;<1,3>,<1,4>,<2,4>,<2,5>,<3,6>,<3,7>.&l…

计算机的错误计算(五十二)

摘要 用错数解释计算机的错误计算&#xff08;五十一&#xff09;中案例 的错误计算原因。 首先&#xff0c;由计算机的错误计算&#xff08;二十七&#xff09;知&#xff0c;错数公式是 上式表示&#xff0c;函数值的错误数字个数 比自变量的错误数字个数 多约 位。其中…

为智能改造赋能,提升运营效率的智慧地产开源了。

智慧地产视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。 AI是新形势下数…

稳稳的年化10%,多任务时序动量策略——基于pytorch的深度学习策略(附python代码)

原创文章第608篇&#xff0c;专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 做因子挖掘这段时间&#xff0c;有一个观感。 传统的因子挖掘&#xff0c;尤其是手工构造因子&#xff0c;到遗传算法因子挖掘。——本身也是一种”拟合“&#xff0c;或者说试图”…

6 定时器

6 定时器 1、基本概念2、使用库函数实现 1、基本概念 定时器的基本工作框架 STM32F103共支持8个定时器 假如分频器PSC的值0,则PSC分频系数1,表示输入1个时钟信号,CNT计数器加1,1S加1&#xff0c;当CNT计数器的值3&#xff0c;跟ARR自动重载寄存器的值21相等时&#xff0c;就…

Linux基于设备树的字符设备驱动框架

掌握设备树是 Linux 驱动开发人员必备的技能&#xff01;因为在新版本的 Linux 中&#xff0c;ARM 相关的驱动全部采用了设备树(也有支持老式驱动的&#xff0c;比较少)&#xff0c;最新出的 CPU 其驱动开发也基本都是基于设备树的&#xff0c;比如 ST 新出的 STM32MP157、NXP的…

【React】详解 index.js 文件

文章目录 一、index.js文件的基本结构1. 引入必要的模块2. 渲染根组件3. 注册服务工作者&#xff08;可选&#xff09; 二、index.js文件的详细解析1. ReactDOM.render的作用2. 为什么使用React.StrictMode3. 服务工作者的注册 三、index.js文件的最佳实践1. 使用模块化引入2. …

缓存常见问题总结

目录 一&#xff1a;缓存穿透 解决方案 1.对请求增加校验机制 2.缓存空值或者特殊值 3.使用布隆过滤器 布隆过滤器原理图​编辑 哈希函数的基本特性 布隆过滤器为什么会存在误判 如何降低误判率 如何使用布隆过滤器 布隆过滤器的应用场景 如何使用布隆过滤器 第一…

QT 建立tcp服务端 TcpServer TcpSocket

基于正点原子教程&#xff0c;个人改编一点点(先写着&#xff0c;还没学客户端来验证) QTcpServer 服务端&#xff0c;下控制多个socket QTcpSocket 可以理解为一个TCP连接 使用客户端的流程为 1.包含network和include 2.声明QTcpServer信号 整个流程都要使用QTcpServer对象&a…

搭建pxe网络安装环境实现服务器自动部署

1.首先配置自动化脚本工具 根据自己的主机设置自己的IP 这张图选择红框下面的选则剩余空间 红帽7的初始网卡为ens33&#xff0c;所以部署后新机器的网卡为ens33 根据自己所要部署的版本编写合适的脚本 使用vim.ks.cfg进入脚本编写 2.配置DHCP 使用vim编写/etc/dhcp/dhcpd.conf …

深入研究Java的String常量池

文章目录 一、StringTable分析一段代码示例一示例二示例三 二、 intern1、StringTable位置2、StringTable 性能调优3、intern深入分析3.1 思考3.2 JDK6中的解释3.3 JDK7中的解释3.4 详细分析3.5 intern正确使用的例子3.6 intern使用不当的例子 一、StringTable 常量池中的字符…

清华计算几何-ElementUniqueness, MinMap, MaxGap

ElementUniqueness问题(EU) 给出一组数给出一组数据,, 判断每个数都是唯一性的或者说判断是否存在重复的. 算法思路很简单, 快速排序 遍历判断: Max(O(nlogn) O(n)) O(nlogn)算法复杂度 代码实现 bool IsEelementUniqueness(const vector<float>& Elemnts) {vect…

【数学建模】 机器学习与统计模型

文章目录 机器学习与统计模型1. 统计分布与假设检验1.1 统计量与常见统计分布常见统计分布Python代码示例 1.2 正态性检验Shapiro-Wilk检验Python代码示例 1.3 独立性检验卡方检验Python代码示例 1.4 两组样本的差异性检验独立样本t检验Python代码示例 1.5 方差分析与事后多重比…

基于Django+MySQL球馆场地预约系统的设计与实现(源码+论文+部署讲解等)

博主介绍&#xff1a;✌全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术栈介绍&#xff1a;我是程序员阿龙&#xff…

学习STM32(1)--Keil软件安装与基本操作和Keil 软件高级应用

目录 1 引 言 2 实验目的 3 实验内容 3.1 认识单片机和STM32 3.2 安装、认识软件Keil和硬件STM32F103开发板 3.3 学习调试工程 3.4 Keil工程软件的配置 4 深入解析 思考一 1.以项目“12-GPIO输出—使用固件库点亮LED”为例子&#xff0c;认识本地工程文件夹&#xf…

2024下《信息安全工程师》案例简答题,刷这些就够了!

距离2024下半年软考已经越来越近了&#xff0c;不知道今年备考软考信息安全工程师的同学们开始准备了吗&#xff1f; 简答题一直是信安拿分的重点区域&#xff0c;对于许多考生来说&#xff0c;也往往是最具挑战性的部分。今天我就把那些重要的案例简答题类型整理汇总给大家&am…

招聘网站的头像如何上传?

1、某招聘网站 显示的是圆形的&#xff0c;但是上传却需要正方形的300300像素。 2、某某招聘网站 仅支持jpg格式&#xff0c;不支持png 3、某某招聘网站 支持1mb以内图片&#xff0c;格式gif,jpg,png都支持。比较友好 4、某招聘网站 这里仅支持200200像素&#xff0c;图片格…

贪心系列专题篇四

​​​​​​​ 目录 整数替换 解法一 解法二 俄罗斯套娃信封问题 堆箱子 可被三整除的最大和 距离相等的条形码 重构字符串 声明&#xff1a;接下来主要使用贪心法来解决问题&#xff01;&#xff01;&#xff01; 整数替换 题目 思路 下面将使用两种方法来解决这…