个人学习笔记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.mzph.cn/pingmian/53858.shtml

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

相关文章

【App】React Native

React Native 的优势: 开发体验好 用统一的代码规范开发移动端程序,不用关注移动端的差异.开发成本低 开发一次,可以生成 Android 和 IOS 俩个系统上的 App学习成本低 只要掌握 JavaScript 和 React 就可以进行移动端开发 React Native 的不…

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

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

2023级JavaScript与jQuery

第三课:JavaScript对象编程 一.预习笔记 1.Date对象 对象创建:var myDatenew Date() 输出显示当前日期的标准时间 对象创建:var myDatenew Date(“2024/09/14”) 对象创建:var myDatenew Date(2024,9,14) 当前对象创建时&…

TiDB从0到1学习笔记(精华篇)

历时四个月,恭喜赵老师的《TiDB从0到1》 系列文章顺利完结,小编再次梳理一遍文稿,并附注解分享给大家。 整体架构 从 TiDB 1.0 到 8.0,TiDB 的体系结构一直在不断演进。接下来让我们一起看看整体架构的变化。 TiDB v1 TiDB v1&…

Windows 环境下 vscode 配置 C/C++ 环境

vscode Visual Studio Code(简称 VSCode)是一个由微软开发的免费、开源的代码编辑器。它支持多种编程语言,并提供了代码高亮、智能代码补全、代码重构、调试等功能,非常适合开发者使用。VSCode 通过安装扩展(Extension…

node.js实现阿里云短信发送

效果图 实现 一、准备工作 1、官网直达网址: 阿里云 - 短信服务 2、按照首页提示依次完成相应资质认证和短信模板审核; 3、获取你的accessKeySecret和accessKeyId; 方法如下: 获取AccessKey-阿里云帮助中心 4、获取SignNa…

变量取值范围

通常意义上,任何一种类型都有自己的取值范围,但跟着变量类型本身的范围太大,有时,不希望取值有这么大,就可以定义枚举,但枚举也不是万能,能准确规定范围是更安全的选择。 Ada编程语言是一门为安…

【LabVIEW学习篇 - 24】:生产者/消费者设计模式

文章目录 生产者/消费者设计模式案例:控制LED等亮灭 生产者/消费者设计模式 生产者/消费者是多线程编程中最基本的一种模式,使用非常普遍。从软件角度看,生产者就是数据的提供方,而消费者就是数据的消费处理方,二者之…

微信小程序开发——比较两个数字大小

在这里我们使用的工具是 需要自行安装和配置。 在微信小程序中比较两个数字大小有以下几种方式: 一、普通条件判断 在小程序的.js 文件中,先定义两个数字,如let num1 5; let num2 3;。通过if - else if - else语句,根据num1与…

elementui 单元格添加样式的两种方法

方法一 <el-table-column fixed prop"name" label"姓名" width"120"> <<template scope"scope"> <span :class"{red:scope.row.color1,yell:scope.row.color2,green:scope.row.col…

文件管理系统DCC与泛微OA系统集成案例

一、项目背景 上海某半导体有限公司主要产品应用于图像传感器、 图像信号处理芯片、 低功耗芯片、 射频芯片等。 公司内部有DCC文件管理系统和OA系统&#xff0c;由SAP PO平台进行中间管理&#xff0c;DCC系统对接泛微OA系统推送文件等操作&#xff0c;提高公司内部各自系统…

智能智造和工业软件研发平台SCSAI功能介绍

用爱编程30年&#xff0c;倾心打造工业和智能智造软件研发平台SCIOT,用创新的方案、大幅的让利和极致的营销&#xff0c;致力于为10000家的中小企业实现数字化转型&#xff0c;打造数字化企业和智能工厂&#xff0c;点击上边蓝色字体&#xff0c;关注“AI智造AI编程”或文末扫码…

vue缓存用法

Store 临时缓存 特点&#xff1a;需要定义&#xff0c;有初始值、响应式、全局使用、刷新重置 Pinia官方文档 https://pinia.vuejs.org 创建 store 缓存 示例代码 import {defineStore} from pinia import {store} from //storeexport const useMyStore defineStore({// 定义…

lightdm , xrandr , startx 桌面管理器,窗口管理器

问题&#xff1a; 了解这几个的含义。 显示服务器 这个不是很明白 显示管理器&#xff0c; 知道就行了&#xff0c;也不是很明白。 窗口管理器。 桌面管理器。 这个其实就是 桌面环境了&#xff0c; 我们的板卡上使用的是xface 。 这个 xface 是一个集合&#xff0c;这里面…

MATLAB中的异常处理机制:掌握错误和警告的管理

在MATLAB编程中&#xff0c;异常处理是一个关键组成部分&#xff0c;它允许程序员管理和响应在程序执行过程中可能发生的错误和警告。MATLAB提供了一套完整的机制来捕获、处理和引发异常&#xff0c;这些机制基于try/catch语句&#xff0c;以及error和warning函数。 1. 异常处…

亚马逊IP关联及其解决方案

在电子商务领域&#xff0c;亚马逊作为全球领先的在线购物平台&#xff0c;吸引了众多商家和个人的参与。然而&#xff0c;随着业务规模的扩大&#xff0c;商家在使用亚马逊服务时可能会遇到IP关联的问题&#xff0c;这不仅影响账户的正常运营&#xff0c;还可能带来一系列不利…

写在OceanBase开源三周年

我收获的深刻感触get 感触1&#xff1a;解决问题才有生存价值 [产品力] 感触2&#xff1a;永无止境的“易用性” [易用性] 感触3&#xff1a;立下“双赢”的flag 感触4&#xff1a;社区建设离不开用户和开发者参与 感触5&#xff1a;从易用到用户自助 [自助能力] 当时想法很简…

基于SpringBoot+Vue的个性化视频推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

游戏工作室搬砖多开怎么做

在游戏行业中&#xff0c;“搬砖”一词特指通过多账号操作&#xff0c;在游戏中赚取虚拟货币或物品&#xff0c;再将其转换为现实收益的行为。游戏工作室通过多开账号进行搬砖&#xff0c;以实现规模化的收益。然而&#xff0c;随着游戏平台和运营商对多账号操作的监管日益严格…

ComfyUI安装节点过程中被降低了版本的软件包重新安装

最近在安装2个没怎么及时更新节点时&#xff0c;安装节点依赖性过程中&#xff0c;将原高版本的软件包&#xff0c;给降到了低版本&#xff0c;解决的办法就是&#xff1a;1、再次删除软件包&#xff0c;2、指定版本号重新安装回高版本软件包。