CV07_深度学习模块之间的缝合教学(2)--维度转换
教学(1):链接
1.1 预备知识
问题:假如说我们使用的模型张量是三维的,但是我们要缝合的模块是四维的,应该怎么办?
方法:pytorch中常用的函数:(1)view函数(2)reshape函数(3)permute函数(4)flatten函数
使用view函数:
import torch
import torch.nn as nnx = torch.randn(10,3,32,32) #记为b,c,h,w
b,c,h,w = x.shape #访问x的shape属性
b,c,h,w = x.size() #size()用于提取x的维度
print(b,c,h,w)#转换成三维b,n,cy = x.view(b,h*w,c) #view()用于变换张量的形状
print(y.shape)
使用permute和flatten函数:
import torch
import torch.nn as nnx = torch.randn(10,3,32,32) #记为b,c,h,w
b,c,h,w = x.shape #访问x的shape属性
b,c,h,w = x.size() #size()用于提取x的维度
print(b,c,h,w)#使用permute和flatten函数转换成三维b,n,c
a = x.permute(0,2,3,1) #1维在1维,原来的2维在现在的4维,原来的3维在2维,原来的4维在3维
a = a.flatten(start_dim=1,end_dim=2) # ctrl+p查看参数信息.在下标为1的维度(其实就是第二维)开始,在下标为2的维度结束,这之间展平
print(a.shape)
结果均为:

1.2 模块和模块之间的维度转换
高维缝合低维
以CoordAtt和AFT为例,前者为4维,后者为3维。我们假如说想在CoordAtt这个四维模块中缝进三维的模块AFT。
缝:还是两个主要位置:类初始化__init__和前向传播forward。
(1)首先我们找到四维模块的前向传播,将用x.size()将四个维度都提取出来。
n, c, h, w = x.size() # 获取输入的尺寸
![]()
(2)用view将x的维度调整成3维,用另一个变量保存起来。
x_01 = x.view(n,h*w,c) #调整为3维张量
![]()
(3)在__init__中将三维模块加进来:
注意通道数保持一致,以及那个h*w对应在三维模块上的那个变量大小保持一致

(4) 在forward中添加进三维模块:
添加进之后,不要忘了三维模块输出还是三维,需要再次转换为4维。

打个断点看一下张量形状:
![]()
可以看到又恢复成了四维。
低维缝合高维
以CoordAtt和AFT为例,前者为4维,后者为3维。我们假如说想在AFT这个三维模块中缝进四维的模块CoordAtt。
原理大同小异,需要注意的就是在升维的时候要保持总数据量不变(各个维度的大小相乘)。
一开始的input的形状:
![]()
经过维度转换后input的形状:
![]()
缝合模块后input的形状:
![]()
再次经过维度转换后input的形状:
![]()

1.3 模型和模块之间的维度转换
举个例子,模型选择VIT(四维),要缝的模块还是AFT(三维)
(1)首先我们在模型前向传播最开始写入“print(x.shape)”,然后运行训练文件,看一下模型的输入张量:
![]()
(2)用x.size()将四个维度都提取出来。
b,c,h,w =x.size()
(3)用view将x的维度调整成3维,用另一个变量保存起来。
x_01 = x.view(b,h*w,c)
x_01的形状为[64,50176,3] (50176很大,会报显存错误,道理理解即可)
(4)在__init__中将三维模块加进来:
注意通道数保持一致,以及那个h*w对应在三维模块上的那个变量大小保持一致
(5) 在forward中添加进三维模块:

附录
view和reshape函数的区别
-
连续性要求:
view()函数要求张量是连续存储的。如果张量不是连续存储的(比如,经过转置、切片等操作后),直接使用view()会抛出错误。在这种情况下,你需要先调用contiguous()方法使张量连续,然后再使用view()。reshape()函数则更为灵活,无论张量是否连续,它都能工作。如果新的形状与原形状不兼容于视图变换(即不满足连续性条件),reshape()会创建一个新的、形状改变的张量副本,这会占用额外的内存。
-
内存共享:
- 当满足条件时,
view()返回的张量与原张量共享相同的内存,也就是说,它们是原张量的视图。修改其中一个会影响另一个。 reshape()可能会返回一个与原张量共享内存的视图(如果满足连续性条件),或者如果必须复制数据以满足新的形状,则返回一个副本。这意味着修改重塑后的张量可能不会影响原张量,具体取决于操作是否导致了数据的复制。
- 当满足条件时,
-
适用范围:
view()仅限于 PyTorch 的张量对象。reshape()在PyTorch中既适用于张量,也适用于NumPy数组,因此在需要跨库操作时提供了更多灵活性。
如果你确定张量满足连续性条件并且希望避免不必要的内存复制,view() 是一个高效的选择。但如果你不关心或不确定这些条件,或者需要保证操作总是安全的(即使是以牺牲一些性能为代价),则应使用 reshape()。在实际应用中,如果不确定是否可以直接使用 view(),使用 reshape() 是一个更保险的做法,因为它能自动处理所有情况。
相关文章:
CV07_深度学习模块之间的缝合教学(2)--维度转换
教学(1):链接 1.1 预备知识 问题:假如说我们使用的模型张量是三维的,但是我们要缝合的模块是四维的,应该怎么办? 方法:pytorch中常用的函数:(1)view函数(2…...
Oracle字符集修改
提示 Oracle数据库默认的字符集编码为US7ASCII,这个编码是不支持中文的,如果想要在数据库存储中文,就需要修改编码为ZHS16GBK或UTF-8 编码和字符集是一个意思,只是叫法不一样而已 前置条件 修改字符集的前提是知道我们现在用的是什…...
k8s核心操作_k8s中的存储抽象_基本概念与NFS搭建_Deployment使用NFS进行挂载---分布式云原生部署架构搭建028
然后我们继续开始看 如果我们使用容器部署,比如我们有三个节点,一个是master,一个node1 一个是node2 那么pod 中我们可以看到,容器中的 /data 等各个目录都映射了出来了,但是 如果比如上面红色的部分,有个pod,原来在node2上,最右边那个,但是这个pod宕机了 那么,k8s会在node…...
数学建模·熵权法
熵权法 一种计算评价指标之间权重的方法。熵权法是一种客观的方法,没有主观性,比较可靠。 具体定义 熵权法的核心在于计算信息熵,信息熵反映了一个信息的紊乱程度,体现了信息的可靠性 具体步骤 Step1正向化处理 将所以评价指标转…...
开放开源开先河(一)
2022年7月28日,以“软件定义世界 开源共筑未来”为主题的全球数字经济大会开放原子开源峰会在北京开幕,承办主峰会和为捐赠人进行授牌仪式的开放原子开源基金会再次进入公众视野。基金会秘书长孙文龙从汇聚全球产业链开源力量、核心链接能力、开发者分享…...
美团收银Android一面凉经(2024)
美团收银Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《美团收银Android一面凉经(2024)》。 应聘岗位: 美团餐饮PaaS平台Android开发工程师…...
触发器练习
在product表上创建三个触发器。每次激活触发器后,都会更新operate表。product表和 表的内容如下 Product表内容 字段名 字段描述 数据类型 主键 外键 非空 唯一 自增 Id 产品编号 Int(10) 是 否 …...
Hadoop-25 Sqoop迁移 增量数据导入 CDC 变化数据捕获 差量同步数据 触发器 快照 日志
章节内容 上节我们完成了如下的内容: Sqoop MySQL迁移到HiveSqoop Hive迁移数据到MySQL编写脚本进行数据导入导出测试 背景介绍 这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 VM 虚拟机…...
Facebook社交平台的未来发展趋势分析
随着科技和社交需求的不断演变,Facebook作为全球最大的社交平台之一,其未来发展的趋势备受关注。从技术创新到社会影响,Facebook正在经历着前所未有的变化和挑战。本文将探讨Facebook未来发展的几个关键趋势,并分析其可能的影响和…...
构建Memcached帝国:分布式部署策略与实践指南
构建Memcached帝国:分布式部署策略与实践指南 Memcached作为一个高性能的分布式内存缓存系统,在面对大规模分布式部署时,需要考虑一系列的策略和最佳实践来确保系统的稳定性和效率。本文将深入探讨Memcached分布式部署的注意事项,…...
Arcgis横向图例设置
想把这个图例改成横向的 点击图例的属性,找到样式...
26.7 Django单表操作
1. 模型管理器 1.1 Manager管理器 Django ORM中, 每个Django模型(Model)至少有一个管理器, 默认的管理器名称为objects. objects是一个非常重要的管理器(Manager)实例, 它提供了与数据库进行交互的接口.通过管理器, 可以执行数据库查询, 保存对象到数据库等操作.objects管理器…...
Android --- Kotlin学习之路:自己写一个SDK给别的APP用(暴漏一个接口,提供学生的身高数据)
今天又来肝kotlin了,主题是:用kt写一个SDK给其他人用,这个小技能在项目中会经常用到,应该有很多小伙伴还不会用,不会的请往下看—⬇ 在项目里面新建一个module 选择Android library,然后点击finish就行了 …...
租用海外服务器需要考虑哪些因素
当企业选择租用海外服务器时需要考虑到哪些因素呢? 对于海外服务器的租用我们需要考虑到机房的位置以及服务器的稳定性如何,所以企业可以选择离目标用户群体比较近一点的机房,以此来降低服务器的延迟度并且能够提高用户的访问速度。 对于机房…...
php将png转为jpg,可设置压缩率
/** * 将PNG文件转换为JPG文件 * param $pngFilePath string PNG文件路径 * param $jpgFilePath string JPG文件路径 * param $quality int JPG质量,0-100,值越低,压缩率越高 * return void * throws Exception */ function convertPngToJpg($pngFilePath, $jpgFile…...
华为HCIP Datacom H12-821 卷37
1.多选题 下面关于Network- Summary-LSA 描述正确的是 A、Network- Summary-LSA中的Metric被设置成从该ABR到达目的网段的开销值 B、Network- Sumary-LSA中的Net mask 被设置成目的网段的网络掩码 C、Network- Summary-LSA 是由ASBR产生的 D、Network- Summary-LSA 中的Li…...
某某会员小程序后端性能优化
背景 某某会员小程序后台提供开放平台能力,为三方油站提供会员积分、优惠劵等api。当用户在油站加油,油站收银会调用我们系统为用户发放积分、优惠劵等。用户反馈慢,三方调用发放积分接口性能极低,耗时30s; 接口情况…...
Docker:基础概念、架构与网络模式详解
1.Docker的基本概念 1.1.什么是docker Docker是一个用于开发,交付和运行应用程序的开放平台.docker使您能够将应用程序域基础框架分开,以便你可以快速开发交付软件.使用docker,你可以管理你的基础架构以管理应用程序相同的方式.通过利用docker用于交付,测试和部署代码的方法,你…...
全国大学生数据建模比赛c题——基于蔬菜类商品的自动定价与补货决策的研究分析
基于蔬菜类商品的自动定价与补货决策的研究分析 摘要 商超蔬菜不易保存,其质量会随着销售时间的增加而变差,影响商超收益,因此,基于各蔬菜品类的历史销售数据,制定合理的销售策略和补货决策对商超的营收十分关键。本文…...
【漏洞复现】飞企互联-FE企业运营管理平台 uploadAttachmentServlet—文件上传漏洞
声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。 一、漏洞描述 企互联-FE企业运营管理平台是一个利用云计算、人工智能、大数据、物联网和移动互联网等现代技术构建的云…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
webpack面试题
面试题:webpack介绍和简单使用 一、webpack(模块化打包工具)1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们&#x…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...
