动手学深度学习(Pytorch版)代码实践 -计算机视觉-47转置卷积

47转置卷积

在这里插入图片描述
在这里插入图片描述

import torch
from torch import nn
from d2l import torch as d2l# 输入矩阵X和卷积核矩阵K实现基本的转置卷积运算
def trans_conv(X, 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 YX = 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))
"""
tensor([[ 0.,  0.,  1.],[ 0.,  4.,  6.],[ 4., 12.,  9.]])
"""# 使用高级API获得相同的结果
X, K = X.reshape(1, 1, 2, 2), K.reshape(1, 1, 2, 2)
tconv = nn.ConvTranspose2d(1, 1, kernel_size=2, bias=False)
tconv.weight.data = K
print(tconv(X))
"""
tensor([[[[ 0.,  0.,  1.],[ 0.,  4.,  6.],[ 4., 12.,  9.]]]], grad_fn=<SlowConvTranspose2DBackward>)
"""# 填充、步幅和多通道
# 当将高和宽两侧的填充数指定为1时,转置卷积的输出中将删除第一和最后的行与列。
tconv = nn.ConvTranspose2d(1, 1, kernel_size=2, padding=1, bias=False)
tconv.weight.data = K
print(tconv(X))
# tensor([[[[4.]]]], grad_fn=<SlowConvTranspose2DBackward>)# 步幅为2的转置卷积的输出
tconv = nn.ConvTranspose2d(1, 1, kernel_size=2, stride=2, bias=False)
tconv.weight.data = K
print(tconv(X))
"""
tensor([[[[0., 0., 0., 1.],[0., 0., 2., 3.],[0., 2., 0., 3.],[4., 6., 6., 9.]]]]
"""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)
print(conv(X).shape) # torch.Size([1, 20, 6, 6])
print(tconv(conv(X)).shape) # torch.Size([1, 10, 16, 16])
print(tconv(conv(X)).shape == X.shape) # True# 与矩阵变换的联系
X = torch.arange(9.0).reshape(3, 3)
K = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
Y = d2l.corr2d(X, K)
print(Y)
"""
tensor([[27., 37.],[57., 67.]])
"""# 将卷积核K重写为包含大量0的稀疏权重矩阵W。 权重矩阵的形状是4 * 9
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)
print(W)
"""
tensor([[1., 2., 0., 3., 4., 0., 0., 0., 0.],[0., 1., 2., 0., 3., 4., 0., 0., 0.],[0., 0., 0., 1., 2., 0., 3., 4., 0.],[0., 0., 0., 0., 1., 2., 0., 3., 4.]])
"""print(Y == torch.matmul(W, X.reshape(-1)).reshape(2, 2))
"""
tensor([[True, True],[True, True]])
"""# 使用矩阵乘法来实现转置卷积
Z = trans_conv(Y, K)
print(Z == torch.matmul(W.T, Y.reshape(-1)).reshape(3, 3))
"""
tensor([[True, True, True],[True, True, True],[True, True, True]])
"""

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

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

相关文章

昇思25天学习打卡营第5天|数据变换Transforms

数据变换Transforms 介绍Transforms分类Common TransformsVision TransformsText TransformsPythonTokenizer LookupLambda Transforms 参考 介绍 MindSpore提供不同种类的数据变换&#xff08;Transforms&#xff09;&#xff0c;配合数据处理Pipeline来实现数据预处理。 所有…

【ROS】apt 找不到 ROS版本?(ROS1和ROS2通用方案)

问题描述 安装ROS底层系统时&#xff0c;经常遇到一个情况就是apt找不到ros的对应版本 解决方案 添加ros官方给的apt源和安装密钥 ROS1 # ros奖项 sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.li…

数学建模 —— MATLAB中的向量

目录 向量的创建方法 (1)直接输入法 (2)冒号法&#xff08;常用&#xff09; (3)利用MATLAB函数创建 linspace函数 logspace函数 向量元素的引用 (1)单个元素引用 (2)多个元素引用 向量元素的修改和删除 向量的创建方法 在 MATLAB中&#xff0c;向量的创建方法主要有…

微软Edge浏览器多用户配置文件管理:个性化浏览体验

在家庭或工作环境中&#xff0c;经常需要在同一台计算机上为多个用户创建和管理独立的浏览体验。微软Edge浏览器提供了多用户配置文件管理功能&#xff0c;允许用户为每个账户设置独立的书签、历史记录、密码、扩展和设置。本文将详细介绍如何在微软Edge中管理多个用户配置文件…

连接Sql Server时报错:无法通过使用安全套接字层加密与 SQL Server 建立安全连接

JDBC连接Sql Server时报错:无法通过使用安全套接字层加密与 SQL Server 建立安全连接 前言解决办法一解决办法二总结 前言 今天使用jdbc连接sql server突然报错为&#xff1a;SQLServerException: “Encrypt”属性设置为“true”且 “trustServerCertificate”属性设置为“fals…

GoMate:配置化模块化的Retrieval-Augmented Generation (RAG) 框架

文章目录 GoMate简介1.1 GoMate的核心技术文档解析向量存储嵌入模型问题查询文本生成文档更新 1.2 GoMate的应用领域智能客服知识库构建内容生成教育培训法律文书处理 GoMate的产品特色2.1 文档解析2.2 向量存储2.3 嵌入模型2.4 问题查询2.5 文本生成2.6 文档更新 GoMate的使用…

解决SPA(单页应用)首屏加载速度慢

SPA是目前流行的前端开发模式&#xff0c;相对于传统的多页面用户体验更好&#xff0c;操作更顺畅&#xff0c;开发效率也更高。但是SPA首屏加载速度慢一直是个致命的问题&#xff0c;由于SPA应用首次打开需要一次性加载大量的静态资源&#xff0c;这就导致了加载速度慢的问题&…

监听设备方向变化?分享 1 段优质 JS 代码片段!

大家好&#xff0c;我是大澈&#xff01; 本文约 700 字&#xff0c;整篇阅读约需 1 分钟。 每日分享一段优质代码片段。 今天分享一段 JS 代码片段&#xff0c;用于在H5端监听设备方向的变化。 老规矩&#xff0c;先阅读代码片段并思考&#xff0c;再看代码解析再思考&#…

文件夹内-资源名称前加序号排列

问题&#xff1a;在文件夹下的资源可以按时间排序&#xff0c;导入unity后资源顺序会乱掉&#xff0c;不方便按顺序赋值&#xff0c;为了方便&#xff0c;通过下面方法在文件夹下统一在资源名称前按顺序加上序号 win11在文件夹内右键&#xff0c;选择——在终端中打开 输入&a…

制造企业用AI可以做什么?

ChatGPT横空出世&#xff0c;有关AI的浪潮席卷全球&#xff0c;比起人工智能如何改变世界&#xff0c;可能你更感兴趣我能用AI可以做的事情是什么&#xff1f; 制造企业用AI可以做的事情是什么?人工智能在制造企业中可以做很多事情&#xff0c;以下是一些主要的应用&#xff1…

企业源代码加密软件丨透明加密技术是什么

在一个繁忙的软件开发公司中&#xff0c;两位员工小李和小张正在讨论源代码安全的问题。 “小张&#xff0c;你有没有想过我们的源代码如果被泄露了怎么办&#xff1f;”小李担忧地问。 “是啊&#xff0c;这是个大问题。源代码是我们的核心竞争力&#xff0c;一旦泄露&#…

LUA 语言中subtree 的使用教程

在线编辑器&#xff1a; https://www.runoob.com/try/runcode.php?filenameHelloWorld&typelua 在Lua语言中&#xff0c;"subtree"通常指的是一个子表或者子树&#xff0c;它指的是一个Lua表&#xff08;table&#xff09;中的一个部分&#xff0c;可以是一个单…

<电力行业> - 《第8课:输电(一)》

1 输电环节的意义 电能的传输&#xff0c;是电力系统整体功能的重要组成环节。发电厂与电力负荷中心通常都位于不同地区。在水力、煤炭等一次能源资源条件适宜的地点建立发电厂&#xff0c;通过输电可以将电能输送到远离发电厂的负荷中心&#xff0c;使电能的开发和利用超越地…

哪些存储器内可以直接运行程序?

存储器是否可以运行程序&#xff0c;主要取决于其是否支持eXecute In Place (XIP) 或类似的直接执行特性。下面根据不同存储器进行分别说明&#xff1a; 1.PROM&#xff08;Programmable Read-Only Memory&#xff0c;可编程只读存储器&#xff09;是一种可以通过用户编程来存…

fiddler使用

1、设置抓取HTTPS的请求 先选中浏览器Browser---Chrome 默认是不抓https的数据包的 有时我们抓取的的包是https的&#xff0c;不是http的&#xff0c;就要做一些设置 Tools---Options 勾选Capture HTTPS CONNECTs 勾选Decrypt HTTPS traffic 勾选 Ignore server certificat…

(单机版)神魔大陆|v0.51.0|冰火荣耀

前言 今天给大家带来一款单机游戏的架设&#xff1a;神魔大陆v0.51.0:冰火荣耀。 如今市面上的资源参差不齐&#xff0c;大部分的都不能运行&#xff0c;本人亲自测试&#xff0c;运行视频如下&#xff1a; (单机版)神魔大陆 下面我将详细的教程交给大家&#xff0c;请耐心阅…

[数据集][目标检测]电力场景下电柜箱门把手检测数据集VOC+YOLO格式1167张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1167 标注数量(xml文件个数)&#xff1a;1167 标注数量(txt文件个数)&#xff1a;1167 标注…

编译工具-Gradle

文章目录 Idea中配置Gradle项目project目录settings.gradlebuild.gradlegradlewgradlew.bat Gradle Build生命周期编写Settings.gradle编写Build.gradleTasksPlugins Idea中配置 配置项&#xff1a;gradle位置 及仓库位置 Gradle项目 Task&#xff0c;settings.gradle,build.…

微型无人机未来发展方向

尽管今天的纳米和微型无人机显示出比早期系统大得多的能力&#xff0c;但在速度、续航能力、航程和有效载荷能力方面仍然存在局限性。在任何或所有这些领域的改进将使部队能够在推进或打击之前收集更大、更详细的可操作情报。这将允许优化任务规划&#xff0c;并有可能减少伤亡…

java一面 哭了-------

常见的设计模式 首先设计模式可分为三大类 创建型模式 单例模式&#xff1a;一个类只有一个实例&#xff0c;并提供全局访问&#xff1b;工厂模式&#xff1a;将创建实例的过程隐藏&#xff0c;实例通过一个工厂方法返回&#xff1b;抽象工厂模式&#xff1a;提供一个创建实…