pytorch | torch.contiguous()方法

news/发布时间2024/5/19 15:26:50

torch.contiguous()方法语义上是“连续的”,经常与torch.permute()、torch.transpose()、torch.view()方法一起使用,要理解这样使用的缘由,得从pytorch多维数组的低层存储开始说起:

touch.view()方法对张量改变“形状”其实并没有改变张量在内存中真正的形状,可以理解为:

  1. view方法没有拷贝新的张量,没有开辟新内存,与原张量共享内存;
  2. view方法只是重新定义了访问张量的规则,使得取出的张量按照我们希望的形状展现。

pytorch与numpy在存储MxN的数组时,均是按照行优先将数组拉伸至一维存储,比如对于一个二维张量

// An highlighted block
t = torch.tensor([[2, 1, 3], [4, 5, 9]])

在内存中实际上是

[2, 1, 3, 4, 5, 9]

按照行优先原则,数字在语义和在内存中都是连续的,当我们使用torch.transpose()方法或者torch.permute()方法对张量翻转后,改变了张量的形状

// An highlighted block
t2 = t.transpose(0, 1)
t2

tensor([[2,4],

[1,5],

[3,9])

此时如果对t2使用view方法,会报错:

原因是:改变了形状的t2语义上是3行2列的,在内存中还是跟t一样,没有改变,导致如果按照语义的形状进行view拉伸,数字不连续,此时torch.contiguous()方法就派上用场了

// An highlighted block
t3 = t2.contiguous()
t3

tensor([[2,4],

[1,5],

[3,9])

可以看到t3与t2一样,都是3行2列的张量,此时再对t3使用view方法:

// An highlighted block
t3.view(-1)

tensor([2, 4, 1, 5, 3, 9])

t3已经按照语义的形状展开了,t2与t共享内存是怎样的呢?

// An highlighted block
t.view(-1)

tensor([2, 1, 3, 4, 5, 9])

可以看出contiguous方法改变了多维数组在内存中的存储顺序,以便配合view方法使用

torch.contiguous()方法首先拷贝了一份张量在内存中的地址,然后将地址按照形状改变后的张量的语义进行排列。

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

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

相关文章

【讲解下Gitea】

🌈个人主页:程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

区块链web3智能合约开发学习-开发工具Remix(1)

学习区块链中常用语言solidity时,我们会用到特别的开发工具,对于学习前期,建议是将代码写到Remix IDE中进行编译部署和测试,这就是我们编写和交互智能合约的地方, 在线remix编译器: https://remix.ethereu…

阿里在GitHub发布AI大模型新项目,让张国荣“复活”!

最近,阿里巴巴又推出了一款AI视频新框架——EMO。 特点及官方演示 EMO的功能特点如下: 1.音频驱动的视频生成:根据输入的音频(如说话或唱歌)和参考图像,生成具有表情变化和头部动作的虚拟角色视频。 2.多语…

Nginx反向代理和缓存

一、Nginx反向代理 1.调度和代理的区别: 1.调度基于内核层面,代理基于应用层面 2.代理必须实现一手托两家 3.调度不需要监听任何端口,不需要工作任何应用程序,代理需要工作和上游服务器一模一样的进程 4.调度没有并发上限&am…

在编程中使用中文到底该不该??

看到知乎上有个热门问题,为什么很多人反对中文在编程中的使用? 这个问题有几百万的浏览热度,其中排名第一的回答非常简洁,我深以为然: 在国内做开发,用中文写注释、写文档,是非常好的习惯&…

Java练习

这个练习我用到了继承,多态和封装。 1.继承: Animal 类是一个抽象类,它有两个子类 Dog 和 Cat。 Dog 和 Cat 分别继承自 Animal 类,因此它们可以使用 Animal 类中定义的属性和方法,同时也可以有自己特有的属性和方法。…

【御控物联】JSON结构数据转换在物联业务中应用(场景案例二)

文章目录 一、物联网业务场景现状二、物联网业务场景数据交互格式三、JSON格式数据转换案例四、JSON数据格式转换DEMO五、在线转换工具六、技术资料 一、物联网业务场景现状 目前,市场上多数物联网关与物联平台捆绑售卖,网关采集到设备数据只能按照指定…

macOS搭建php环境以及调试Symfony

macOS搭建php环境以及调试Symfony macOS搭建php环境以及调试Symfony 古老的传说运行环境快速前置安装环境 php 的安装安装 Xdebug 来调试 php如何找到你的 php.iniXdebug 安装成功 创建并调试的 Hello world 安装 PHP Debug 安装 Symfony 安装 Composer安装 Symfony CLI 创建 …

基于Springboot旅游网站管理系统设计和实现

基于Springboot旅游网站管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系…

ssm013小型企业办公自动化系统的设计和开发+vue

小型企业办公自动化系统的设计与实现 摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对小型企业办公信息管理混乱&am…

Linux系统----------探索mysql数据库MHA高可用

目录 一、MHA概述 1.1 什么是 MHA 1.2MHA 的组成 1.2.1MHA Node(数据节点) 1.2.2MHA Manager(管理节点) 1.3MHA 的特点 1.4MHA工作原理 1.5数据同步的方式 1.5.1同步复制 1.5.2异步复制 1.5.3半同步复制 二、搭建 MySQ…

时间管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)大学生

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…

简单工厂模式

1.1 面试受挫 package com.lhx.design.pattern.test;import java.util.Scanner;public class Test {public static void main(String[] args){System.out.println("**********************************************"); System.out.println("《大话设计模式》代…

一则关于Go的高级构建指北

本文将探索Golang高级构建技巧,从而有助于创建更高效的二进制文件。 构建选项 以下是 go build 命令最常用的一些选项: -o: 指定输出文件名。默认输出文件名是主软件包的名称,在 Windows 系统中会自动添加 .exe 后缀。-v: 详细输出。该选项…

docker--部署 (超详版) (五)

环境准备:docker,mysql,redis,镜像,nginx 把虚拟机打开,连接xshell,参考博客: https://blog.csdn.net/m0_74229802/article/details/136965820?spm1001.2014.3001.5501 一&#x…

神经网络:梯度下降法更新模型参数

作者:CSDN _养乐多_ 在神经网络领域,梯度下降是一种核心的优化算法,本文将介绍神经网络中梯度下降法更新参数的公式,并通过实例演示其在模型训练中的应用。通过本博客,读者将能够更好地理解深度学习中的优化算法和损…

JavaScript动态渲染页面爬取——Selenium的使用

JavaScript动态渲染页面爬取 JavaScript动态渲染得页面不止Ajax一种。例如,有些页面的分页部分由JavaScript生成,而非原始HTML代码,这其中并不包含Ajax请求。还有类似淘宝这种页面,即使是Ajax获取的数据,其Ajax接口中…

Centos8/linux/虚拟机安装docker

docker分为ce版和ee版,个人使用ce版就行了,别问为什么,问就是ee版收费。 这是在线版的,离线版的请参考Centos8离线下载安装docker 1.首先切换到root用户 2.为确保安装时出现不必要的问题,先更新一下yum包 sudo yum…

Kubernetes(K8S)学习(三):K8S实战案例

K8S实战案例 一、部署wordpressmysql(NodePort方式)(1)创建命名空间:wordpress(2)创建wordpress-db.yaml文件(mysql)(3)创建pod:mysql…

springcloud基本使用四(Feign远程调用)

springcloud创建两个子项目order-server和user-server具体数据信息请查看springcloud前三章 order-server向user-server远程调用数据 order-server引入依赖&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>sprin…
推荐文章