Contiguous()到底怎么用,什么时候用

pytorch | contiguous() 函数 阅读详情

contiguous原意:邻近的,一个tensor是.is_contiguous() is True,说明该数组按照行展开和底层元数据的存储顺序是一致的。

Tensor多维数据的存储,是以多维数组按照行展开成一维数组,作为元数据,原信息里保存了他的形状。调用数据的时候,是按照 stride 取数据的。比如一个三行五列的Tensor,他的stride就是[5,1]。指的是取该维度下一个数据时,要走的步长。

如果要访问矩阵中的下一个元素都是通过偏移来实现,这个偏移量称为步长(stride[1])

为什么需要contiguous?

当我们调用.view()时,如果该数组之前被.permute()或.transpose()过,虽然这两个操作不会改变数组的元数据,但是会新建一个Tensor元信息,该元信息里声明了stride,就导致后续调用.view()时理想的情况是按照transpose后的tensor进行view展开,但实际上会按照底层元数据进行变形。view 仅在底层数组上使用指定的形状进行变形。而且上述直接调用会报错:

view size is not compatible with input tensor's size and stride

Contiguous如何作用的?

t2 = t.transpose(0,1)
t3 = t2.contiguous()

相当于重新开辟了一块内存,t3的元数据是按照变化后的行展开存储的。这样的话,.view()访问底层数组时,就不会产生元信息stride和元数据对应不上的问题了,也不会报错了。

什么时候需要Contiguous?

情况一:

当后续操作改变了元数据,但实际上不想改变原始Tensor的话,需要深拷贝或contiguous,新建内存存储新tensor。如:

x = torch.randn(3, 2)
y = torch.transpose(x, 0, 1)
print("修改前:")
print("x-", x)
print("y-", y)
 
print("\n修改后:")
y[0, 0] = 11
print("x-", x)
print("y-", y)

运行结果:

修改前:
x- tensor([[-0.5670, -1.0277],
           [ 0.1981, -1.2250],
           [ 0.8494, -1.4234]])
y- tensor([[-0.5670,  0.1981,  0.8494],
           [-1.0277, -1.2250, -1.4234]])
 
修改后:
x- tensor([[11.0000, -1.0277],
           [ 0.1981, -1.2250],
           [ 0.8494, -1.4234]])
y- tensor([[11.0000,  0.1981,  0.8494],
           [-1.0277, -1.2250, -1.4234]])

如果对y使用了.contiguous(),改变y的值时,x不会有任何影响!

情况二:

后续需要使用读取元数据的方法,如.view(),仅在底层数组上使用指定的形状进行变形,这时候如果前面使用了transpose、permute等改变元信息但不改变元数据的函数的话,就会出现元信息stride和实际形状不对应,view报错。

pytorch中contiguous()的理解 功能:将tensor的内存变为连续的。 有些tensor并不是占用一整块内存,而是由不同的数据块组成,而tensor的view()操作依赖于内存是整块的,这时只需要执行contiguous()这个函数,把tensor变成在内存中连续分布的形式。 注:在pytorch的最新版本0.4版本中,增加了torch.reshape(), 这与 numpy.reshape 的功能类似。它大致相当于 tenso... 阅读详情

相关推荐

【PyTorch】关于张量的连续性(contiguous)

因为它的作用是在不改变底层数据的情况下,使用新的形状查看张量。如果张量不是连续的,那么它的底层数据的存储顺序与它按行优先一维展开的顺序不同,这样就无法用一个新的步长来实现形状的变化。这个张量是连续的,因为它的底层数据的存储顺序是[0, 1, 2, …因为有些操作在底层实现的时候,需要按照一定的顺序访问或修改张量的元素,而不连续的张量会导致这些操作变得复杂或低效。连续性条件的含义是,张量底层一维数组元素的存储顺序与张量按行优先一维展开的元素顺序是否一致。,如果可以,返回视图,否则返回拷贝。

TKK的博客 3188

Pytorch中contiguous()函数理解

引言 在pytorch中,只有很少几个操作是不改变tensor的内容本身,而只是重新定义下标与元素的对应关系的。换句话说,这种操作不进行数据拷贝和数据的改变,变的是元数据。 会改变元数据的操作是: narrow() view() expand() transpose() 在使用transpose()进行转置操作时,pytorch并不会创建新的、转置后的tensor,而是修改了tensor中的一些属性(也就是元数据),使得此时的offset和stride是与转置tensor相对应的。转置的t.

清晨的光明 9万+

AI大模型应用性能核心指标:TTFT 与 TPOT 详解

这两个指标专门衡量大模型流式响应性能,是评估用户体验的关键指标。· 是什么:从请求到第一个输出的等待时间· 为什么重要:决定用户的第一印象和响应感知· 优化方向:模型加载、预处理、冷启动优化· 行业标准:最好<500ms,可接受<1.5s· 是什么:每个输出token的平均生成时间· 为什么重要:决定流式输出的流畅度和总完成时间· 优化方向:推理引擎、内存带宽、批处理优化· 行业标准:最好<50ms/token,可接受<100ms/token在Dify/大模型应用中的意义。

lovehu6686的博客 3983

PyTorch中,.contiguous()的作用

并将张量的数据按照连续的方式进行存储。这样可以确保张量在内存中的布局是连续的,从而。当对张量进行某些操作后,其内存布局可能会变得不连续,即不满足。方法只会在需要时进行实际的内存重分配操作,而不会复制数据。方法来重新调整张量的内存布局,使其连续存储。进行处理,可以得到一个连续的张量。方法的作用是返回一个连续的张量,即。的调用并不会导致额外的内存开销。在这种情况下,可以使用。是一个连续的张量,而通过对。下面是一个示例,演示了。在PyTorch中,

行子的博客 2413

用Cursor+Node.js零代码搭建健康数据仪表盘:从数据录入到可视化全流程

本文详细介绍了如何利用Cursor AI编程助手和Node.js,无需手动编写代码,即可构建个人健康数据仪表盘的全流程。通过自然语言指令,实现从数据录入、存储到动态图表可视化的完整系统,展示了AI驱动开发在降低技术门槛、提升开发效率方面的强大能力。

gitlab7runner的博客 700

重带电粒子的能量歧离(energy straggling)

能量歧离,Bethe-Bloch

G751888629的博客 2298

torch.contiguous()方法

torch.contiguous()方法语义上是“连续的”,经常与torch.permute()、torch.transpose()、torch.view()方法一起使用,要理解这样使用的缘由,得从pytorch多维数组的低层存储开始说起: touch.view()方法对张量改变“形状”其实并没有改变张量在内存中真正的形状,可以理解为: view方法没有拷贝新的张量,没有开辟新内存,与原张量共享内存; view方法只是重新定义了访问张量的规则,使得取出的张量按照我们希望的形状展现。 pytorch与nu

qq_37828380的博客 3万+

在macOS上使用GitHub的超详细指南

GitHub:免费的远程仓库,可用来托管自己的开源项目。它利用了Git强大的克隆和分支功能,让我们参与别人的开源项目和让别人参与自己的开源项目变得简单高效。

Mars的博客 3392

Pytorch中的contiguous()函数

这个函数主要是为了辅助pytorch中的一些其他函数,主要包含 在PyTorch中,有一些对Tensor的操作不会真正改变Tensor的内容,改变的仅仅是Tensor中字节位置的索引。这些操作有: narrow(),view(),expand()和transpose() 在运行这几个函数之前,需要先把Variable进行.contiguous()操作。 这是因为:有些tensor并不是...

u011832617的博客 5888

基于Python的MGWR多尺度地理加权回归模型

多尺度地理加权回归(MGWR)变量之间的关系在地理空间上不是均一的,所有特征变量的影响都在不同的空间范围(带宽)内变化,某些变量可能表现出局部性影响(小带宽),某些变量可能表现出全局性影响(大带宽),通过优化每个特征变量的带宽,捕捉到空间关系的多尺度特性,得到更细致的模型解释。

weixin_61965078的博客 3855

Ubuntu22.04安装ROS2 —— ROS2 humble 详细图文教程

本文详细介绍了如何在Ubuntu22.04(Jammy)系统下配置ROS2环境,安装RO2软件包,并验证安装成功。ROS2的版本是Humble Hawksbill。:ROS是一个开源的,提供硬件抽象、设备驱动、库、工具和通信机制,支持模块化开发与集成,广泛用于机器人控制和自动化应用。ROS2 相较于 ROS1 在架构设计、通信机制和平台支持等方面做出了改进。ROS1 采用集中式主节点(Master)进行节点间通信,存在单点故障风险,且实时性和跨平台支持较弱。

weixin_49649078的博客 8819

pytorch | torch.contiguous()方法

pytorch | torch.contiguous()方法

Mopes__的博客 3493

Qwen3-Omni-30B-A3B-Instruct微调指南:如何打造专属智能博物官(附数据集)

本文详细介绍了如何对Qwen3-Omni-30B-A3B-Instruct模型进行微调,以打造专业的智能博物官。指南涵盖了从理解模型架构优势、构建高质量文博数据集,到使用LLaMA-Factory进行实战微调、效果评估与部署优化的完整流程,并提供了关键的环境配置与性能优化建议,帮助开发者在垂直领域高效定制专属AI助手。

weixin_29096377的博客 1144

pytorch中的contiguous()

pytorch中的contiguous() 1 先看看官方中英文doc: torch.Tensor.contiguous (Python method, in torch.Tensor) torch.Tensor.is_contiguous (Python method, in torch.Tensor) 1.1 contiguous() → Tensor Returns a contiguous tensor containing the same data as self tensor. If sel

junbaba_的博客 1833

Flannel,Calico 和 Cilium 之间有哪些优缺点和差别?

例如,在一个多租户的容器集群中,可以通过Calico为不同租户的容器设置精细的访问控制策略,确保每个租户的资源安全。例如,在设置复杂的网络策略和BGP路由时,需要对网络概念和Calico的配置语法有比较深入的了解。它可以根据容器的标签、服务等信息来定义访问规则,并且可以实现更加细粒度的网络安全策略,如HTTP层的策略。性能损耗:在overlay网络模式下(如VXLAN),由于需要对数据包进行额外的封装和解封装操作,会带来一定的性能损耗,尤其是在高流量的场景下,这种性能损耗可能会更加明显。

chinansa的博客 1529

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

torch中contiguous()函数

1. 背景 torch中一些操作会改变原数据,比如:narrow() view() expand() transpose()等操作,在使用transpose()进行转置操作时,pytorch并不会创建新的、转置后的tensor,而是修改了tensor中的一些属性(也就是元数据),使得此时的offset和stride是与转置tensor相对应的。转置的tensor和原tensor的内存是共享的,即改变转置后的tensor, 原先tensor中内容也会改变,而contiguous方法就类似深拷贝,使得上面这些操

orangerfun的博客 5839

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

关于Contiguous()方法

在使用transpose()进行转置操作时,pytorch并不会创建新的、转置后的tensor,而是修改了tensor中的一些属性(也就是元数据),使得此时的offset和stride是与转置tensor相对应的,而转置的tensor和原tensor的内存是共享的。维度变换后的变量是之前变量的浅拷贝,指向同一区域,即view操作会连带原来的变量一同变形,这是不合法的,所以也会报错;也即,经过上述操作后得到的tensor,它内部数据的布局方式和从头开始创建一个常规的tensor的布局方式是不一样的!

Ashley_ly的博客 595

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

PyTorch中,contiguous()

连续(contiguous)内存块是指一系列数据在内存中的存储是相邻的、没有间隔的。当数据是连续存储时,计算机处理器可以更快地获取数据,因为它可以按照内存地址的顺序依次读取数据,而不需要在不同的内存位置之间进行跳转。方法时,PyTorch会创建一个新的连续的Tensor,它会重新排列数据以确保连续的内存布局。当一个Tensor在内存中的存储不是连续的时候,它可能会影响一些操作的性能和可行性。方法的作用就是将一个不连续的Tensor变成连续的,从而确保内存块的布局是连续的。,并再次检查了它的连续性。

qq_51753728的博客 1451

pytorch中contiguous()

pytorch中contiguous()contiguous:view只能用在contiguous的variable上。如果在view之前用了transpose, permute等,需要用contiguous()来返回一个contiguous copy。一种可能的解释是:有些tensor并不是占用一整块内存,而是由不同的数据块组成,而tensor的view()操作依赖于内存是整块的,这时只需要...

jacke121的专栏 2万+

pytorch 中 contiguous() 函数理解

Pytorch中contiguous()函数理解

weixin_51524504的博客 521

为什么需要Tensor.contiguous()? PyTorch中Tensor.contiguous()作用分析

为什么需要Tensor.contiguous() Tensor.contiguous()作用 Returns a contiguous in memory tensor containing the same data as self tensor. If self tensor is already in the specified memory format, this function returns the self tensor. 作用在官方文档里,描述的看似清晰但又模棱两可。例如x是一个Te

Codefmeister's BLOG 7442

【pytorch函数笔记】view()、contiguous()、permute()

permute(),这个函数是做维度交换的torch.view()方法对张量改变“形状”其实并没有改变张量在内存中真正的形状。简单地说,view方法没有拷贝新的张量,没有开辟新内存,与原张量共享内存,只是重新定义了访问张量的规则,使得取出的张量按照我们希望的形状展现。torch.contiguous()方法首先,然后将地址按照形状改变后的张量的语义进行排列。就是说contiguous()方法改变了多维数组在内存中的存储顺序,以便配合view方法使用。

Catherinemin的博客 1356

pytorch中的contiguous()函数的浅浅解释

contiguous() 有些tensor并不是占用一整块内存,而是由不同的数据块组成。 contiguous()函数的作用:把tensor变成在内存中连续分布的形式。 来自链接一 contiguous一般与transpose,permute,view搭配使用:使用transpose或permute进行维度变换后,调用contiguous,然后方可使用view对维度进行变形(如:tensor_var.contiguous().view() ),示例如下: x = torch.Tensor(

To be a better man 5827

【input.view().permute().contiguous()】 Pytorch中tensor.view().permute().contiguous()函数理解

文章目录1 何处用到2 view()3 permute()4 contiguous()5 感谢链接 1 何处用到 yolov3中有一行这样的代码,在此记录一下三个函数的含义 例子中batch_size为int,len(self.anchors_mask[i])=3,self.bbox_attrs=25(voc数据集),input_height, input_width两个参数也均为int。 prediction = input.view(batch_size, len(self.anchors_mask[i

计算机视觉方面的点点滴滴,欢迎一起讨论 2018

Torch中Tensor.contiguous()函数

转载原文: 1.函数定义 Returns a contiguous tensor containing the same data as self tensor. 返回一个与原始tensor相同元素数据的 “连续”tensor类型 If self tensor is contiguous, this function returns the self tensor. 如果原始tensor本身就是连续的,则返回原始tensor 2.定义理解 定义本身有两个重要的点: 对原始

张先生-您好的博客 2157
上一篇: DDP(DistributedDataParallel)自用笔记
下一篇: Cutmull-Rom Spline笔记和个人理解
叙利亚男篮
博客等级 码龄6年 31粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值