【python深度学习】——pytorch中tensor的view、resize(resize_)与reshape

@TOC

1. view()

view()方法具有以下特性:

  1. 它只能在tensor是连续的时候使用(可以调用is_contiguous()方法查看tensor是否连续), 如果要对不连续的张量使用, 需要先使用.contiguous()使其在内存上连续。
  2. view()方法不改变tensor的storage内容, 只改变其元数据(metadata)。(参见后面的示例代码,通过tensor的storage().data_ptr()查看数据的地址)
  3. 调用view()时,需要确保tensor的元素总数保持不变。例如, [2, 3]的tensor可以view为[3, 2]或[1, 6]。

示例代码

import torch# 创建一个2x3的tensor
tensor = torch.rand(2, 3)
print(tensor.shape)  # 使用view()改变tensor形状
new_tensor = tensor.view(3, 2)
print(new_tensor.shape)  # 查看tensor和new_tensor的存储地址
print(tensor.storage().data_ptr())  
print(new_tensor.storage().data_ptr())  # 查看tensor和new_tensor的存储内容
print(tensor.storage())
print(new_tensor.storage())# 查看tensor和new_tensor的stride
print(tensor.stride())  
print(new_tensor.stride())  

2. resize()/resize_():

  1. resize_()是原地操作版本,会直接修改原tensor,而resize()会返回一个新的tensor。
  2. resize()/resize_()方法可以自动改变tensor的元素总数。如果新形状的元素总数大于原来的,会用0填充新增的元素;如果小于原来的,则会截断多余的元素。在补0的情况下, 会开辟一块新的内存区域来存放新的tensor。

示例代码

import torch# 创建一个2x3的tensor
tensor = torch.tensor([1,2,3,4])
print(tensor.shape)
print(tensor.storage().data_ptr())
# 使用resize()改变tensor形状
tensor.resize_(3, 2)
print(tensor.shape) # Output: torch.Size([3, 2])# 新增的元素会被填充为0
print(tensor)
print(tensor.storage().data_ptr())

3. reshape():

  1. 在数据连续时
    reshape()方法在数据连续时, 作用和view()类似, 都是共享存储区的情况下(不改变tensor的storage)
  2. 不连续时, reshape类似等同于contiguous()+view()——它会在新的存储区创建一个tensor, 不与原数据共享存储区。

示例代码

import torch# 创建一个2x3的tensor
tensor = torch.rand(2, 3)# reshape()处理非连续的tensor
non_contiguous = tensor.t()
print(non_contiguous.is_contiguous()) # Output: False
reshaped = non_contiguous.reshape(1, 6)
print(reshaped.is_contiguous()) # Output: Trueprint(reshaped.storage().data_ptr())
print(non_contiguous.storage().data_ptr())

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

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

相关文章

Python自建chatgpt服务器:使用Flask实现类似Chat服务器流式API接口

引言 使用Flask框架可以轻松实现一个类似chatgpt流式响应的接口,该接口通过POST请求接收prompt和history参数,分别对应为聊天系统的提示词和对话历史,server则给予server-sent event (SSE)返回聊天系统的响应。 服务端 开发前的思考 我们…

【LeetCode每日一题】3067. 在带权树网络中统计可连接服务器对数目-DFS和图

Hey我的编程小伙伴们👋,今天我要和大家分享一道我在LeetCode上遇到的超有趣的题目——编号3067的“在带权树网络中统计可连接服务器对数目”。这是一道非常适合练习DFS和图的题目哦!🤓💻 邻接图是什么? 在…

2024.05.22 校招 实习 内推 面经

绿*泡*泡VX: neituijunsir 交流*裙 ,内推/实习/校招汇总表格 1、校招 | TP-LINK 2025届提前批校园招聘正式启动 校招 | TP-LINK 2025届提前批校园招聘正式启动 2、实习 | 航空工业一飞院2024年实习生招聘正式启动! 实习 | 航空工业一飞院…

为Ubuntu 14.04升级 Kernel V4.4的内核

1:下载2个文件 wget https://kernel.ubuntu.com/mainline/v4.4-wily/linux-headers-4.4.0-040400-generic_4.4.0-040400.201601101930_amd64.deb wget https://kernel.ubuntu.com/mainline/v4.4-wily/linux-image-4.4.0-040400-generic_4.4.0-040400.201601101930_…

构建LangChain应用程序的示例代码:14、使用LangChain、GPT和Activeloop的Deep Lake来处理代码库

使用LangChain、GPT和Activeloop的Deep Lake来处理代码库 在本教程中 我们将使用Langchain Activeloop的Deep Lake与GPT一起分析LangChain本身的代码库。 设计 准备数据: 使用langchain_community.document_loaders.TextLoader上传所有Python项目文件。我们将…

【加密与解密】【03】加密系统

术语 RSA,加密算法,同时也是一个公司的名称,该公司制定了PKCS公钥加密标准PKI,Public Key Infrastructure,公钥基础设施PKCS,Public Key Cryptography Standards,公钥加密标准X.509&#xff0c…

模式识别选择题

影响K-均值聚类算法效果的主要因素之一是什么? A. 初始聚类中心的选取 B. 样本输入顺序 C. 模式相似性测度 D. 分类准则 答案:A支持向量机(SVM)在处理非线性问题时,通常使用什么方法? A. 引入核函数 B. 增加…

真的太太太难顶顶顶了!!!为了微信群发消息,我写了一个自动化脚本

真的太太太难顶顶顶了!!!为了微信群发消息,我写了一个自动化脚本 最近真的太难顶了,要给微信几十个同学发同样的消息,我一共才十个手指,怎么可能扛得住这么造,真太伤身体了&#xf…

离线html文件及资源文件夹转换为单个mhtml文件

离线html文件及资源文件夹转换为单个mhtml文件 一、前言二、转换过程2.1mhtml文件简介2.2关键要点2.2.1boundary的使用2.2.2Content-Transfer-Encoding的选择2.2.3Content-Location 2.3转换代码 一、前言 旧版本的谷歌浏览器保存网页时默认只有两个选项,一个是网页…

鸿蒙Ability Kit(程序框架服务)【UIExtensionAbility】

UIExtensionAbility 概述 [UIExtensionAbility]是UI类型的ExtensionAbility组件,需要与[UIExtensionComponent]一起配合使用,开发者可以在UIAbility的页面中通过UIExtensionComponent嵌入提供方应用的UIExtensionAbility提供的UI。UIExtensionAbility会…

匈牙利匹配算法

一 什么是匈牙利匹配算法 匈牙利算法是一种解决二分图最大匹配问题的算法。在二分图中,将左边的点称为X集合,将右边的点称为Y集合,我们需要在X集合和Y集合之间建立一个双向边集合,使得所有的边都不相交。如果我们能够找到一个最大…

力扣669,修剪二叉搜索树

669. 修剪二叉搜索树 - 力扣(LeetCode) 递归 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNo…

19. FreeRTOS 直接任务通知当邮箱使用

FreeRTOS中任务通知作为邮箱的使用 引言 在嵌入式系统开发中,任务间的通信是非常重要的一部分。FreeRTOS提供了多种任务间通信的方式,如队列、信号量、事件标志组等。然而,这些通信方式可能会带来一些额外的开销。为了提供一种更高效的通信…

C++ Thread多线程并发记录(8)生产者-消费者模型与信号量(条件变量)

一.生产者-消费者模型 生产者-消费者模型是一个十分经典的多线程并发协作模式。所谓的生产者-消费者,实际上包含了两类线程,一种是生产者线程用于生产数据,另一种是消费者线程用于消费数据,为了解耦生产者和消费者的关系&#xff…

Opencv 色彩空间

一 核心知识 色彩空间变换; 像素访问; 矩阵的、-、*、、; 基本图形的绘制 二 颜色空间 RGB:人眼的色彩空间; OpenCV默认使用BGR; HSV/HSB/HSL; YUV(视频); 1 RGB 2 BGR 图像的多种属性 1 访问图像(Ma…

人工智能大模型的进化之路:探索如何让它们变得更“聪明”

一、引言 在人工智能(AI)领域,大模型凭借其强大的处理能力和广泛的应用前景,已经成为研究的热点。然而,尽管这些模型在多个领域展现出了惊人的能力,但它们仍然面临着理解力、泛化能力和适应性等方面的挑战…

学习Java的日子 Day51 数据库,DDL,DML

Day51 MySQL 1.数据库 数据库(database)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效地组织和管理存储在数据库中的数据 MySQL就是数据库管理系统&#…

VisionPro界面乱序或字体排版异常,字体不适应界面窗口大小

很多人在安装Visionpro后都遇到了一个界面显示异常的问题: 打开visionpro后字体大小不统一,显示不全或显示在其他窗口之上,如下所示。 解决该问题,首先关闭Visionpro软件,右击软件选择属性->兼容性。勾选兼容模式下面的方框。…

颠覆想象的AI绘画:DALL-E 2

DALL-E 2是由美国人工智能研究公司OpenAI推出的文本生成图像系统,它是DALL-E的后续版本,具备更强大的功能和更高的图像质量。“DALL-E”这个名字源于西班牙著名艺术家Salvador Dal和广受欢迎的皮克斯动画机器人“Wall-E”的组合。 发展历史 初代DALL-E&a…

WebStorm 2024.1.1 Mac激活码 前端开发工具集成开发环境(IDE)

WebStorm 2024 Mac激活码 搜索Mac软件之家下载WebStorm 2024 Mac激活版 WebStorm 2024 功能介绍 WebStorm 2024是由JetBrains公司开发的一款专为前端开发设计的集成开发环境(IDE)。它提供了一整套功能,旨在提高Web开发者的工作效率和代码质…