当前位置: 首页 > news >正文

PyTorch系列教程:Tensor.view() 方法详解

这篇简明扼要的文章是关于PyTorch中的tensor.view()方法的介绍与应用,与reshape()方法的区别,同时给出示例进行详细解释。

Tensor基础

Tensor(张量)的视图是一个新的Tensor,它与原始Tensor共享相同的底层数据,但具有不同的形状或大小。view()方法用于在不改变其数据的情况下将张量重塑为新的形状。它返回原始张量的新视图。这意味着修改新的张量会影响原来的张量,反之亦然。
在这里插入图片描述

语法:

Tensor.view(*shape) -> Tensor
  • self:想要重塑的输入Tensor。
  • *shape:一个torch.Size对象或指定输出张量所需形状的整数序列。还可以使用-1从其他维度推断一个维度的大小。

然而,Tensor.view()仅适用于连续张量,即存储在连续内存中的张量。如果输入张量不是连续的,则需要在调用tensor .view()之前调用tensor.consecuous()。你可以通过调用tensor.is_consecuous()来检查张量是否是连续的。

代码示例

下面演示如何在实践中使用tensor.view()方法:

>>> import torch
>>> torch.manual_seed(2023)
>>> # Create a tensor with the shape of 4x4
>>> x = torch.randn(4, 4)
>>> print(x)
tensor([[ 0.4305, -0.3499,  0.4749,  0.9041],[-0.7021,  1.5963,  0.4228, -0.6940],[ 0.9672,  1.5569, -2.3860,  0.6994],[-1.0325, -2.6043,  0.9337, -0.1050]])
>>> y = x.view(16)
>>> print(y)
tensor([ 0.4305, -0.3499,  0.4749,  0.9041, -0.7021,  1.5963,  0.4228, -0.6940,0.9672,  1.5569, -2.3860,  0.6994, -1.0325, -2.6043,  0.9337, -0.1050])
>>> z=x.view(2,8)
>>> print(z)
tensor([[ 0.4305, -0.3499,  0.4749,  0.9041, -0.7021,  1.5963,  0.4228, -0.6940],[ 0.9672,  1.5569, -2.3860,  0.6994, -1.0325, -2.6043,  0.9337, -0.1050]])
>>> w=x.view(-1,2)
>>> print(w)
tensor([[ 0.4305, -0.3499],[ 0.4749,  0.9041],[-0.7021,  1.5963],[ 0.4228, -0.6940],[ 0.9672,  1.5569],[-2.3860,  0.6994],[-1.0325, -2.6043],[ 0.9337, -0.1050]])
>>> 

你可以看到y和x有相同的数据,但形状不同,是16x1。Z和x有相同的数据,但形状不同,是2x8。W和x有相同的数据,但形状不同,是8x2。w的最后一个维度是从其他维度和x中的元素数量推断出来的。

Torch.view()和torch.reshape()的区别

torch.reshape()函数和tensor .view()方法之间的区别在于torch.reshape()可以返回原始张量的视图或副本,具体取决于新形状是否与原始形状和步幅兼容,而tensor .view()总是返回原始张量的视图,但仅适用于连续张量。

当你想重塑一个张量而不担心它的连续性或复制行为时,你应该使用torch.reshape(),当你想重塑一个连续张量并确保它与原始张量共享相同的数据时,你应该使用tensor. view()。

示例对比

场景 1:数据连续时,两者行为一致
import torch# 创建一个连续存储的张量 (2x3)
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
print("原始形状:", x.shape)      # (2, 3)
print("是否连续:", x.is_contiguous())  # True# 使用 view 改变形状 (3x2)
y = x.view(3, 2)
print("view 结果:", y)           # [[1, 2], [3, 4], [5, 6]]# 使用 reshape 改变形状 (3x2)
z = x.reshape(3, 2)
print("reshape 结果:", z)        # [[1, 2], [3, 4], [5, 6]]

结果一致,且未复制数据(is_contiguous() 返回 True)。

场景 2:数据不连续时,view 失败,reshape 成功
# 转置后数据不再连续(原按行存储,转置后按列逻辑访问)
x_transposed = x.t()
print("转置后形状:", x_transposed.shape)      # (3, 2)
print("是否连续:", x_transposed.is_contiguous())  # False# 尝试用 view 改变形状 → 报错!
try:y = x_transposed.view(2, 3)
except RuntimeError as e:print("view 错误:", str(e))  # "invalid argument: cannot view a non-contiguous tensor as ..."# 使用 reshape 成功(自动复制数据)
z = x_transposed.reshape(2, 3)
print("reshape 结果:", z)         # [[1, 4], [2, 5], [3, 6]]
print("是否连续:", z.is_contiguous())  # True
场景 3:reshape 的灵活性(使用 -1
# 不确定某一维度的大小时,仅用 reshape
x_2d = torch.randn(4, 6)  # 形状 (4, 6)
# 将最后一维压缩为总和,剩余维度自动推断
y = x_2d.reshape(-1, 3)   # 结果形状: (8, 3)
print(y.shape)              # torch.Size([8, 3])

因此,我们应优先用 view:当数据连续且形状明确时,view 更高效(零复制);优先用 reshape:需处理非连续数据、动态推断维度或不确定形状时。

相关文章:

PyTorch系列教程:Tensor.view() 方法详解

这篇简明扼要的文章是关于PyTorch中的tensor.view()方法的介绍与应用,与reshape()方法的区别,同时给出示例进行详细解释。 Tensor基础 Tensor(张量)的视图是一个新的Tensor,它与原始Tensor共享相同的底层数据,但具有不同的形状或…...

从零开始了解Manus(文末附教程)

大家好,我是樱木。 《从零开始了解Manus》,这个教程对于想了解 Manus的同学,全部都在里面了! Manus 是一款能像真人一样帮你干活的AI助手,运行在云端,不占电脑内存。 它可以自动完成复杂任务&#xff0c…...

不同开发语言之for循环的用法、区别总结

一、Objective-C &#xff08;1&#xff09;标准的c风格 for (int i 0; i < 5; i) {NSLog("i %d", i); } &#xff08;2&#xff09;for in循环。 NSArray *array ["apple", "banana", "orange"]; for (NSString *fruit in …...

CentOS 7 aarch64上制作kernel rpm二进制包 —— 筑梦之路

环境说明 centos 7 aarch64 gcc 8.3.1 kernel 5.4.290 准备编译制作 # 安装必要的工具和包yum install rpm-devel rpmdevtools yum groupinstall "Development Tools"yum install ncurses-devel bc elfutils-libelf-devel openssl-devel # 安装gcc 8.3.1# 修改…...

Cursor 使用经验,一个需求开发全流程

软件开发中 Cursor 的使用经验成为关注焦点&#xff0c;尤其是处理大型数据集的需求。用户提到“Cursor 使用经验&#xff0c;一个需求开发全流程”&#xff0c;但“Cursor”可能指数据库游标&#xff0c;涉及逐行处理数据。本文将详细探讨开发一个需求的完整流程&#xff0c;包…...

2025-03-08 学习记录--C/C++-PTA 习题9-2 计算两个复数之积

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 二、代码&#xff08;C语言&#xff09;⭐️ #include <stdio.h>struct complex{int real;int imag; …...

DeepSeek-R1本地化部署(Mac)

一、下载 Ollama 本地化部署需要用到 Ollama&#xff0c;它能支持很多大模型。官方网站&#xff1a;https://ollama.com/ 点击 Download 即可&#xff0c;支持macOS,Linux 和 Windows&#xff1b;我下载的是 mac 版本&#xff0c;要求macOS 11 Big Sur or later&#xff0c;Ol…...

【时时三省】(C语言基础)赋值语句

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 赋值语句 在C程序中,最常用的语句是:赋值语句和输入输出语句。其中最基本的是赋值语句程序中的计算功能大部分是由赋值语句实现的,几乎每一个有实用价值的程序都包括赋值语句。有的程序中的大部分语句都是赋值…...

如何提取图片文字

如何分析图片风格&#xff1a; 分析下图片是什么风格&#xff0c;用即梦AI的提示语描述。我要使用描述语去即梦生成同样的图...

3.3.2 用仿真图实现点灯效果

文章目录 文章介绍Keil生成.hex代码Proteus仿真图中导入.hex代码文件开始仿真 文章介绍 点灯之前需要准备好仿真图keil代码 仿真图参考前文&#xff1a;3.3.2 Proteus第一个仿真图 keil安装参考前文&#xff1a;3.1.2 Keil4安装教程 keil新建第一个项目参考前文&#xff1a;3.1…...

BGP 基本配置实验

实验拓扑 实验需求 按照图示配置 IP 地址&#xff0c;R1 和 R5 上使用环回口模拟业务网段&#xff0c;R2&#xff0c;R3&#xff0c;R4 的环回口用于配置 Router-id 和建立 IBGP 邻居AS 200 运行 OSPF 实现内部网络互通R1&#xff0c;R2&#xff0c;R4&#xff0c;R5 运行 BGP…...

关于 QPalette设置按钮背景未显示出来 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/146047054 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...

## DeepSeek写水果记忆配对手机小游戏

DeepSeek写水果记忆配对手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端水果记忆配对小游戏H5文件&#xff1a; 要求 可以重新开始游戏 可以暂停游戏 卡片里的水果…...

P8662 [蓝桥杯 2018 省 AB] 全球变暖--DFS

P8662 [蓝桥杯 2018 省 AB] 全球变暖--dfs 题目 解析讲下DFS代码 题目 解析 这道题的思路就是遍历所有岛屿&#xff0c;判断每一块陆地是否会沉没。对于这种图的遍历&#xff0c;我们首先应该想到DFS。 代码的注意思想就是&#xff0c;在主函数中遍历找出所有岛屿&#xff0c…...

opentitan riscv

OpenTitan‌是一个开源的硅根信任&#xff08;Root of Trust, RoT&#xff09;项目&#xff0c;旨在使硅RoT的设计和实现更加透明、可信和安全&#xff0c;适用于企业、平台提供商和芯片制造商。该项目由lowRISC CIC管理&#xff0c;作为一个协作项目&#xff0c;旨在生产高质量…...

数据结构篇——串(String)

一、引入 在计算机中的处理的数据内容大致可分为以整形、浮点型等的数值处理和字符、字符串等的非数值处理。 今天我们主要学习的就是字符串数据。本章主要围绕“串的定义、串的类型、串的结构及其运算”来进行串介绍与学习。 二、串的定义 2.1、串的基本定义 串&#xff08;s…...

Linux系统重置密码

当root账号忘记密码时&#xff0c;如何重置密码&#xff1f;下面有两种方法可以解决该问题&#xff1a; 重置root密码 1.方法一、rd.break命令 第一步 重启系统&#xff0c;在下图所示界面中按e&#xff0c;进入编辑模式----一定要快速按&#xff0c;否则6秒后就会到登陆界面…...

Flow Matching 和 Rectified Flow的区别

Flow Matching是通过匹配目标向量场来训练CNF&#xff0c;比如通过最小化目标向量场和模型预测之间的差异。 Rectified Flow的核心思想是学习一个确定性轨迹&#xff0c;将数据分布转换为噪声分布&#xff0c;比如通过线性插值或者更复杂的路径。 推荐阅读&#xff1a; SD3的采…...

机器学习编译

一、机器学习概述 1.1 什么是机器学习编译 将机器学习算法从开发形态通过变换和优化算法使其变成部署形态。即将训练好的机器学习模型应用落地&#xff0c;部署在特定的系统环境之中的过程。 开发形态&#xff1a;开发机器学习模型时使用的形态。Pytorch,TensorFlow等通用框…...

什么是 BotGate 动态防护?

随着网络威胁日益复杂&#xff0c;传统的防护方法逐渐暴露出漏洞。BotGate 动态防护是一种结合机器人网络&#xff08;Botnet&#xff09;和动态防护技术的新兴网络安全模式。它利用大量分布式设备&#xff08;即“僵尸网络”或 Botnet&#xff09;的实时协作能力&#xff0c;快…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

P10909 [蓝桥杯 2024 国 B] 立定跳远

# P10909 [蓝桥杯 2024 国 B] 立定跳远 ## 题目描述 在运动会上&#xff0c;小明从数轴的原点开始向正方向立定跳远。项目设置了 $n$ 个检查点 $a_1, a_2, \cdots , a_n$ 且 $a_i \ge a_{i−1} > 0$。小明必须先后跳跃到每个检查点上且只能跳跃到检查点上。同时&#xff0…...