pytorch函数reshape()和view()的区别及张量连续性

news2025/2/22 16:19:53

目录

1.view()

2.reshape()

3.引用和副本:

4.区别

5.总结


在PyTorch中,tensor可以使用两种方法来改变其形状:view()和reshape()。这两种方法的作用是相当类似的,但是它们在实现上有一些细微的区别。

1.view()

view()方法是PyTorch中的一种基础操作,用于调整tensor的形状。它返回一个新的tensor,其数据与原始tensor相同,但具有新的形状。与原始tensor共享存储空间,因此在新的tensor上的任何操作都会影响原始tensor

下面是一个使用view()方法改变tensor形状的示例:

import torch

# 创建一个形状为(2, 3, 4)的tensor
x = torch.randn(2, 3, 4)

# 使用view()方法将其形状改变为(6, 4)
y = x.view(6, 4)

print(x.shape) # 输出torch.Size([2, 3, 4])
print(y.shape) # 输出torch.Size([6, 4])

在上面的代码中,我们使用view()方法将形状为(2, 3, 4)的tensor x 转换为形状为(6, 4)的新tensor y。

2.reshape()

reshape()方法也用于调整tensor的形状,与view()方法类似,但是在实现上有一个重要的区别:reshape()方法返回一个新的tensor,其数据与原始tensor相同,但是可能与原始tensor共享存储空间,具体取决于实现。

下面是一个使用reshape()方法改变tensor形状的示例:

import torch

# 创建一个形状为(2, 3, 4)的tensor
x = torch.randn(2, 3, 4)

# 使用reshape()方法将其形状改变为(6, 4)
y = x.reshape(6, 4)

print(x.shape) # 输出torch.Size([2, 3, 4])
print(y.shape) # 输出torch.Size([6, 4])

在上面的代码中,我们使用reshape()方法将形状为(2, 3, 4)的tensor x 转换为形状为(6, 4)的新tensor y。

3.引用和副本:

view 并不产生原始数据的新拷贝,副本产生原始数据的新拷贝

视图是数据的一个别称或引用,通过该别称或引用亦便可访问、操作原有数据,但原有数据不会产生拷贝如果我们对视图进行修改,它会影响到原始数据,物理内存在同一位置,这样避免了重新创建张量的高内存开销。由上面介绍的 PyTorch 的张量存储方式可以理解为:对张量的大部分操作就是视图操作!

与之对应的概念就是副本。副本是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不在同一位置

对张量连续性条件的理解 

4.区别

view()和reshape()的区别在于它们对于共享存储空间的处理方式。view()方法对共享存储空间的处理比较严格,必须要满足两个条件:新的tensor的大小必须与原始tensor大小相同,且新的tensor的步幅(stride)必须与原始tensor步幅相同,否则将会抛出一个错误。相反,reshape()方法更加灵活,可以处理整个形状大小的变化。

下面是一个使用view()方法会抛出错误的示例:

import torch

# 创建一个形状为(2, 3, 4)的tensor
x = torch.randn(2, 3, 4)

# 使用view()方法将其形状改变为(6, 5),会抛出一个错误
y = x.view(6, 5)

在上面的代码中,我们尝试使用view()方法将形状为(2, 3, 4)的tensor x 转换为一个形状为(6, 5)的新tensor,但由于新的tensor大小与原始tensor大小不同,所以会抛出一个错误。

下面是一个使用reshape()方法可以处理大小变化的示例:

import torch

# 创建一个形状为(2, 3, 4)的tensor
x = torch.randn(2, 3, 4)

# 使用reshape()方法将其形状改变为(6, 5)
y = x.reshape(6, 5)

print(x.shape) # 输出torch.Size([2, 3, 4])
print(y.shape) # 输出torch.Size([6, 5])

在上面的代码中,我们使用reshape()方法将形状为(2, 3, 4)的tensor x 转换为一个形状为(6, 5)的新tensor。

5.总结

        PyTorch中的view()和reshape()方法都用于将tensor的形状调整为新的形状。view()方法返回一个新的tensor,其中数据与原始tensor相同,但具有新的形状,并且对共享存储空间进行严格的处理;reshape()方法也返回一个新的tensor,其中数据与原始tensor相同,但是对共享存储空间的处理比较灵活,可以处理整个形状大小的变化。在使用这两种方法时,需要根据需要选择不同的方法。

  • (1)reshape()函数返回一个新的张量,而view()函数返回一个与原始张量共享存储空间的张量。这意味着,当你使用reshape()函数改变张量形状时,会创建一个新的张量对象,而原始张量对象不会改变。而当你使用view()函数改变张量形状时,会返回一个新的张量对象,但是它与原始张量对象共享存储空间,因此对新张量的修改也会影响原始张量。
  • (2)reshape()函数可以处理任意形状的张量,而view()函数只能处理连续的张量。如果你尝试使用view()函数处理非连续的张量,会引发RuntimeError异常。
  • (3)reshape()函数可以自动推断某些维度的大小,而view()函数需要手动指定所有维度的大小。如果你使用reshape()函数时只指定了部分维度的大小,它会自动推断其他维度的大小。而如果你使用view()函数时没有指定所有维度的大小,会引发RuntimeError异常。
  • (4)reshape()函数可以使用-1作为占位符来自动计算某个维度的大小,而view()函数不支持使用-1作为占位符。
  • (5)reshape()和view()函数都是用于改变张量形状的函数,但是它们之间有一些区别。如果你需要处理非连续的张量或者需要自动推断某些维度的大小,应该使用reshape()函数。如果你需要处理连续的张量并且需要手动指定所有维度的大小,应该使用view()函数。
  • (6)view比较轻量化,占资源较少
     

参考:PyTorch 82. view() 与 reshape() 区别详解 - 知乎 

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

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

相关文章

【C++】C++继承——切片、隐藏、默认成员函数、菱形

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:C学习 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【C】STL…

行为型设计模式——责任链模式

摘要 责任链模式(Chain of responsibility pattern): 通过责任链模式, 你可以为某个请求创建一个对象链. 每个对象依序检查此请求并对其进行处理或者将它传给链中的下一个对象。 一、责任链模式意图 职责链模式(Chain Of Responsibility) 是一种行为设…

Uniapp实现APP云打包

一. 基础配置 二. APP图标配置 1. 点击浏览 选取图标(注:图片格式为png) 2. 点击自动生成所有图标并替换 三. 点击发行 并选择云打包 四. 去开发者中心获取证书 我这里是已经获取好的,没有获取的话,按照提示获取即可,非常简单…

axios和vite在本地开发环境配置代理的两种方式,五分钟学会

如果你使用vue或者react开发,就得使用axios吧,然后为了解决跨域问题,就得使用vite配置吧,那怎么协调配置它们两个才能正常工作呢? 正常的流程:配置axios的baseURL,然后配置vite的proxy 第一种…

【论文阅读】Directional Connectivity-based Segmentation of Medical Images

目录 摘要介绍方法效果结论 论文:Directional Connectivity-based Segmentation of Medical Images 代码:https://github.com/zyun-y/dconnnet 摘要 出发点:生物标志分割中的解剖学一致性对许多医学图像分析任务至关重要。 之前工作的问题&…

Linux 实训4 正则表达式

将实训4 :正则表达式的完成情况提交实验报告。 创建并输入文本文件 a bcd 1 233 abc123 defrt456 123abc 12568teids abcfrt568 "Open Source" is a good mechan1sm to develop programs. apple is my favorite food. Football game is not …

数据结构----结构--非线性结构--树

数据结构----结构–非线性结构–树 一.树(Tree) 1.树的结构 树是一对多的结构 2.关于树的知识点 1.根节点:树最上面的节点 2.中间节点:树中间的节点 3.叶子节点:树最下面的节点 如下图 4.边:在树中…

弱信号的采样与频谱分析(修订中...)

1.频谱混叠效应 - 波形数据抽样 这是一组经过抽样的数据的频谱,红圈圈出的两条谱线,是我们需要关注的特征谱线。这个信号与右侧的临近信号比较,求频率比值,比值恒定与理论推导相符。再5取1降低采样率后,大致相同的频率…

虹科案例 | 虹科MSR实现易碎艺术品安全运输——开发有效减少冲击和振动的新工艺

【案例】在CTI研究项目中使用带有加速度传感器的虹科MSR165数据记录仪对冲击振动进行风险评估 项目背景: 全球艺术品运输量持续增长。在运输过程中,画作面临着诸多压力和风险,如冲击和振动。在博物馆搬运这些画作、装卸包装箱、卡车在颠簸的…

Android 视频通话分析总结

1、WireShark 解析视频流 1.1 安装插件 下载rtp_h264_extractor.lua文件,放入Wireshark安装目录 下载地址:https://download.csdn.net/download/tjpuzm/88381821 在init.lua中添加如下代码 dofile(DATA_DIR.."rtp_h264_extractor.lua") 重新…

淘宝的数据使用和数字化进阶过程

宝在数字化转型的过程中,数据使用和数字化进阶均经历了几个不同的发展阶段,这些经历对致力于数字化转型的企业有更多借鉴意义。 1 淘宝数据API使用的5个阶段 淘宝的数据使用经历了5个阶段,如图所示,以下分别进行介绍。 1.依靠数…

苹果手机数据恢复软件哪款好用?看到就是赚到!

手机中储存的数据包含了许多重要的照片、视频、文件等,更重要的是这些数据中所承载着的珍贵记忆。但在我们使用手机的过程中,难以避免一些意外,手机中的数据可能会因为误删除、手机故障、手机恢复出厂设置等原因丢失。 这时候,如…

[chrome devtools]Console面板

点解开发者工具控制台【Console】后,在最右侧找到点击出现如下面板: 【1】是否在控制台显示网络相关的日志信息,比如get请求 【2】刷新或者跳转页面时,原先控制台已显示的日志是否继续保留在控制台上,就是刷新页面控…

批处理数值计算实战,以及打印乘法表

文章目录 计算2的N次方转二进制最大公约数和最小公倍数打印乘法表 计算2的N次方 二进制转换是经常遇到的一个需求,批处理可以非常便捷地完成这个工作。而二进制转化过程中,第一步就是和 2 n 2^n 2n比较大小,所以在实现这个功能之前&#xff…

基于微信小程序的自驾游拼团小程序的设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

15. RocketMQ 消息队列

Spring Cloud 微服务系列文章,点击上方合集↑ 1. 简介 RocketMQ是一款开源的分布式消息中间件,它具有高可靠性、高性能和可伸缩性,被广泛用于构建分布式系统中的可靠消息传递服务。 官网地址: https://rocketmq.apache.org/ 2…

使用超声波清洗机洗眼镜有哪些注意事项、高颜值超声波清洗机推荐

眼镜,对于许多人来说,不仅仅是矫正视力的工具,更是日常生活的重要伴侣。但是,眼镜的清洁问题却常常让人感到困扰。镜片上的污渍、指纹、甚至小划痕,都让眼镜的使用体验大打折扣。幸运的是,随着科技的进步&a…

优化Python开发环境的几个神技巧

用Python编代码体验极佳,并且随着新版本的发布越来越好! 对于很多人而言,Python提供的大量免费函数库、高可读性的程序和新引入的类型注释让很多爱不释手。 然而,数据科学家特别容易使自己的Jupyter notebook变得庞大而杂乱&…

生物制药公司Acesis Holdings申请650万美元纳斯达克IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,生物制药公司Acesis Holdings近期已向美国证券交易委员会(SEC)提交招股书,申请在纳斯达克IPO上市,股票代码为(ACSB),Acesis …

【AI视野·今日NLP 自然语言处理论文速览 第四十期】Mon, 25 Sep 2023

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 25 Sep 2023 Totally 46 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers ReConcile: Round-Table Conference Improves Reasoning via Consensus among Diverse LLMs Authors Justin C…