个人学习笔记7-5:动手学深度学习pytorch版-李沐

#人工智能# #深度学习# #语义分割# #计算机视觉# #神经网络#

计算机视觉

13.10 转置卷积

例如,卷积层和汇聚层,通常会减少下采样输入图像的空间维度(高和宽)。然而如果输入和输出图像的空间维度相同,在以像素级分类的语义分割中将会很方便。转置卷积(transposed convolution)可以增加上采样中间层特征图的空间维度。

13.10.1 基本操作

转置卷积的实现:

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

对输入矩阵X和卷积核矩阵K实现基本的转置卷积运算trans_conv:

def trans_conv(X, K):#K表示卷积核h, w = K.shapeY = 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] * Kreturn Y

转置卷积通过卷积核“广播”输入元素,从而产生大于输入的输出。验证上述实现输出。

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

结果输出:

当输入X和卷积核K都是四维张量时,我们可以使用高级API获得相同的结果。

X, K = X.reshape(1, 1, 2, 2), K.reshape(1, 1, 2, 2)
tconv = nn.ConvTranspose2d(1, 1, kernel_size=2, padding=1, bias=False)#(输入通道数,输出通道数,卷积核,是否具有偏差)
tconv.weight.data = K
tconv(X)

结果输出:

13.10.2 填充、步幅和多通道

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

tconv = nn.ConvTranspose2d(1, 1, kernel_size=2, padding=1, bias=False)
tconv.weight.data = K
tconv(X)

结果输出:

在转置卷积中,步幅被指定为中间结果(输出),而不是输入。使用相同输入和卷积核张量,将步幅从1更改为2会增加中间张量的高和权重。


 

tconv = nn.ConvTranspose2d(1, 1, kernel_size=2, stride=2, bias=False)
tconv.weight.data = K
tconv(X)

结果输出:

对于多个输入和输出通道,转置卷积与常规卷积以相同方式运作。如果我们将X代入卷积层f来输出Y = f(X),并创建一个与f具有相同的超参数、但输出通道数量是X中通道数的转置卷积层g,那么g(Y )的形状将与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

结果输出:

13.10.3 与矩阵变换的联系

定义一个3x3的矩阵和2 × 2卷积核K,然后使用corr2d函数计算卷积输出Y:

X = torch.arange(9.0).reshape(3, 3)#构造一个3x3的一个0-8的矩阵
K = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
Y = d2l.corr2d(X, K)
Y

结果输出;

接下来,我们将卷积核K重写为包含大量0的稀疏权重矩阵W。权重矩阵的形状是(4,9),其中非0元素来自卷积核K。

def kernel2matrix(K):k, W = torch.zeros(5), torch.zeros((4, 9))k[:2], k[3:5] = K[0, :], K[1, :]W[0, :5], W[1, 1:6], W[2, 3:8], W[3, 4:] = k, k, k, kreturn WW = kernel2matrix(K)
W

结果输出:

逐行连结输入X,获得了一个长度为9的矢量。然后,W的矩阵乘法和向量化的X给出了一个长度为4的向量。重塑它之后,可以获得与上面的原始卷积操作所得相同的结果Y:我们刚刚使用矩阵法实现了卷积。

Y == torch.matmul(W, X.reshape(-1)).reshape(2, 2)

结果输出:

同样,可以使用矩阵乘法来实现转置卷积。将上面的常规卷积2 × 2的输出Y作为转置卷积的输入。想要通过矩阵相乘来实现它,只需要将权重矩阵W的形状转置为(9, 4)。

Z = trans_conv(Y, K)
Z == torch.matmul(W.T, Y.reshape(-1)).reshape(3, 3)

结果输出:

如何将转置卷积换算成正常卷积:

填充为0步幅为1:

填充为p步幅为1:(例子p=1)

填充为p步幅为s:(例子p=0)

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

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

相关文章

c++基础入门二

C基础入门(二) 一、函数重载 在自然语言中,一句话或者一个词有不同的意思。例如:国乒和别人比赛是“谁也赢不了”,而国足和别人比赛是“谁也赢不了” 函数重载:是函数的一种特殊情况,C允许在同一作用域中声明几个功…

浪潮信息金风慧能:打造智慧新能源运营平台

近来,浪潮信息携手北京金风慧能技术有限公司(简称“金风慧能”),共同发布了新能源场站集控中心的创新解决方案。该方案深度融合了浪潮信息的前沿服务器技术、软硬件一体化超融合方案及边缘计算产品与金风慧能自主研发的GW SCADA S…

C++进阶:多态

✨✨所属专栏:C✨✨ ✨✨作者主页:嶔某✨✨ 多态的概念 多态(polymorphism)的概念:通俗来说,就是多种形态。多态分为编译时多态(静态多态)和运⾏时多态(动态多态),这⾥我们重点讲运⾏时多态。 编译时多态(静态多态)主…

车机中 Android Audio 音频常见问题分析方法实践小结

文章目录 前言1. 无声2. 断音3. 杂音4. 延迟播放5. 焦点问题6. 无声问题(连上 BT )其他完善中…… 前言 本文主要总结了一下车机开发中遇到的 Audio 有关的问题,同时参考网上的一案例,由于Audio 模块出现音频问题的场景很多,对每一个出现的问…

气压测试实验(用IIC)

I2C: 如果没有I2c这类总线,连接方法可能会如下图: 单片机所有的通讯协议,无非是建立在引脚(高低电平的变换高低电平持续的时间)这二者的组合上,i2c 多了一个clock线,负责为数据传输打节拍。 (i2…

linux-L3-linux 复制文件

linux 中要将文件file1.txt复制到目录dir中,可以使用以下命令 cp file1.txt dir/复制文件 cp /path/to/source/file /path/to/destination移动 mv /path/to/source/file /path/to/destination复制文件夹内的文件 cp -a /path/to/source/file /path/to/destinati…

【刷题】Day3--错误的集合

hello!又见面啦~~~ 一道习题,要长脑子了...... 【. - 力扣(LeetCode)】 【思路】 /*** Note: The returned array must be malloced, assume caller calls free().*/void Bubble_sort(int arr[], int size) {int temp;for (int i…

校园安全无小事,EasyCVR视频综合管理平台助力智慧校园视频监控系统全面升级

随着信息技术的飞速发展,智慧校园作为教育信息化的重要载体,正逐步成为提升校园安全管理、优化教育资源配置、增强师生互动体验的关键手段。其中,高效、智能的视频监控系统作为智慧校园不可或缺的一部分,扮演着至关重要的角色。TS…

视频推拉流/直播点播EasyDSS平台安装失败并报错“install mediaserver error”是什么原因?

TSINGSEE青犀视频推拉流/直播点播EasyDSS平台支持音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务,在应用场景中可实现视频直播、点播、转码、管理、录像、检索、时移回看等。此外,平台还支持用户自行上传视频文件,也可…

《OpenCV计算机视觉》—— 图像金字塔

文章目录 什么是图像金字塔?一、定义与基本原理二、主要类型三、构建过程四、应用领域 图像金字塔中的下采样和上采样一、下采样(Downsampling)二、上采样(Upsampling)三、总结 代码实现 什么是图像金字塔?…

linux---压缩打包

linux打包和压缩文件和目录: 归档(打包)命令:tar 归档就是将多个文件或者目录打包成为一个文件,存放再磁盘中,方便文件或者目录丢失时,可以恢复。 归档文件名使用相对路径 (注意区分归档文件和被归档文…

一家电子元件企业终止,业绩规模小,疑似通过收购调节收入利润

贝特电子终止原因如下:首先,报告期内贝特电子营收较低,收购东莞博钺股权可能构成重大资产重组,且假如扣除报告期内来自东莞博钺的净利润,贝特电子的净利润恐怕不符合深交所上市标准;其次,交易所…

QT之QML学习五:添加自定义Qml组件,以及组件管理

开发环境: 1、Qt 6.7.2 2、Pyside6 3、Python 3.11.4 4、Windows 10 重要的事情说三遍,使用自定义qml参考链接: Qt官网参考网址!!! 重要的事情说三遍,使用自定义qml参考链接: Qt官网参考网址!!! 重要的事情说三遍,使用自定义qml参考链接: Qt官网参考网址!!!…

第四天旅游线路预览——从换乘中心到喀纳斯湖

第四天:从贾登峪到喀纳斯风景区入口,晚上住宿贾登峪; 换乘中心有4 路车,喀纳斯①号车,去喀纳斯湖,路程时长约5分钟; 将上面的的行程安排进行动态展示,具体步骤见”Google earth stu…

List<Map<String, Object>>汇总统计排序

开发环境&#xff1a;jdk 1.8 需求一&#xff1a; 1、统计每个小时(升序)不同事件的产品产量 2、统计不同事件&#xff08;OK 、NG&#xff09;的总产量 public static void main(String[] args) {//数据源List<Map<String, Object>> list new ArrayList<Map…

使用 PyCharm 新建 Python 项目详解

使用 PyCharm 新建 Python 项目详解 文章目录 使用 PyCharm 新建 Python 项目详解一 新建 Python 项目二 配置环境1 项目存放目录2 Python Interpreter 选择3 创建隔离环境4 选择你的 Python 版本5 选择 Conda executable 三 New Window 打开项目四 目录结构五 程序编写运行六 …

多人开发小程序设置体验版的痛点

抛出痛点 在分配任务时,我们将需求分为三个分支任务,分别由前端A、B、C负责: 前端A: HCC-111-实现登录功能前端B: HCC-112-实现用户注册前端C: HCC-113-实现用户删除 相应地,我们创建三个功能分支: feature_HCC-111-实现登录功能feature_HCC-112-实现用户注册feature_HCC-1…

uView使用心得

说实话我不爱用这个库&#xff0c;感觉很鸡肋&#xff0c;坑很多&#xff0c;可能没用习惯 picker选择器 绑定默认值是通过设置index&#xff0c;并且这个index需要通过api设置进去&#xff0c;设置defalutindex绑定值无效&#xff08;只有初始化可以&#xff0c;后面动态改变…

半导体制造技术中的沉积和驱入(Deposition and drive-in)过程

来源&#xff1a;半导体制造技术导论——萧宏 沉积和驱入过程 图5.34 硼掺杂工艺高温扩散炉系统示意图 图5.35 扩散掺杂工艺流程 图5.36 扩散工艺在超浅结深&#xff08;USJ&#xff09;上的应用

【物联网技术大作业】设计一个智能家居的应用场景

前言&#xff1a; 本人的物联网技术的期末大作业&#xff0c;希望对你有帮助。 目录 大作业设计题 &#xff08;1&#xff09;智能家居的概述。 &#xff08;2&#xff09;介绍智能家居应用。要求至少5个方面的应用&#xff0c;包括每个应用所采用的设备&#xff0c;性能&am…