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

PyTorch中Tensor对象的属性和方法

目录

一、核心属性

复数支持

转置与视图操作

​元信息

​梯度相关

​二. 常用方法

​基本操作

​转置与视图

​数学运算

​深度学习相关

​3. 使用示例

​梯度计算

​设备管理

​自定义反向传播

​4. 注意事项

​总结


一、核心属性

1.requires_grad: _bool:

该属性标记这个张量是否需要参与梯度计算,若为Ture,则计算时追踪其梯度,反之不会

x = torch.tensor([1.0], requires_grad=True)
y = x * 2
print(y.requires_grad) 

2.retains_grad: _bool:

在requires_grad=False的情况下是否保留梯度,默认为False,用于临时计算梯度

 3.shape

张量的维度信息,类似numpy收的shape

4.data:Tensor

直接访问tensor的底层数据

5.device:_device

张量储存的设备类型(CPU/GPU)

6.dtype

数据类型

7.layout:_layout

 内存布局类型(如连续存储或稀疏等),通常无需直接操作

复数支持

real

复数张量的实部

imag

复数张量的虚部

转置与视图操作

  • T: 返回二维张量的共轭转置视图(原地操作)。
     
    mat = torch.randn(2, 3)
    mat_T = mat.T  # 转置(无共轭)
    mat_conj_T = mat.T.conj()  # 共轭转置
  • H: 返回二维张量的共轭转置视图(等价于 .conj().transpose())。
  • mT: 转置最后两个维度(适用于高维张量)。
  • mH: 类似 H,但作用于多维张量的最后两个维度。

元信息

  • ndim (_int): 张量的维度数量。
  • output_nr (_int): 在计算图中作为输出的序号(仅在 requires_grad=True 时有效)。
  • _version (_int): 张量版本标识符(用于自动微分缓存)。
  • _base (Optional[Tensor]): 如果张量是通过视图操作(如切片)创建的,指向原始张量。
  • _cdata (_int): 内部 C 层面的数据指针(开发者无需直接使用)。

梯度相关

  • grad_fn (Optional[_Node]):
    记录该张量的梯度计算函数(节点),用于反向传播链追踪。
  • _grad (Optional[Tensor]): 存储梯度值。
  • grad (Optional[Tensor]): 公共接口访问梯度(与 _grad 同步)。
  • _backward_hooks (Optional[Dict[_int, Callable]]):
    自定义反向传播钩子,用于修改梯度计算流程。

​二. 常用方法

基本操作
  • .clone(): 创建张量副本(独立存储)。
  • .detach(): 断开与计算图的连接(返回新张量,requires_grad=False)。
  • .numpy(): 转换为 NumPy 数组(需在 CPU 上且 dtype 支持)。
  • .to(device, dtype=None): 移动设备并转换数据类型。
转置与视图
  • .transpose(dim1, dim2): 交换指定维度的轴。
  • .reshape(*shape): 改变形状(需保持元素总数一致)。
  • .squeeze(dim=None): 移除单维度轴。
  • .expand(*sizes): 扩展张量为更大的尺寸(元素不复制)。
数学运算
  • .add().sub().mul().div() 等逐元素运算符。
  • .sum().mean().max().min() 等聚合操作。
  • 矩阵乘法:@ 运算符或 .matmul() 方法。
深度学习相关
  • .zero_(): 将所有元素置零。
  • .ones_(): 将所有元素置一。
  • .normal_(mean=0, std=1): 从正态分布初始化。
  • .relu().sigmoid() 等激活函数。

3. 使用示例

梯度计算
x = torch.tensor([2.0], requires_grad=True)
y = x * x + 3
y.backward()  # 自动计算梯度
print(x.grad)    # 输出: tensor(4.0)
设备管理
x = torch.randn(3, 3).cuda()  # 创建 GPU 张量
y = x.to("cpu")               # 移动到 CPU
z = y.to("cuda", dtype=torch.float16)  # 移动到 GPU 并转换 dtype
自定义反向传播
def custom_backward_hook(grad):return grad * 2  # 修改梯度t = torch.tensor([1.0], requires_grad=True)
t.register_backward_hook(custom_backward_hook)# 前向计算
y = t * 2
y.backward()print(t.grad)  # 输出: tensor(4.0) (原梯度 2.0 * 2)

4. 注意事项

  1. 视图与拷贝

    • 视图操作(如切片、转置)不会复制数据,修改视图会影响原张量。
    • 使用 .clone() 或 .copy() 创建独立副本。
  2. 内存优化

    • 优先使用视图操作(如 .reshape())而非复制数据。
  3. 混合精度训练

    • 通过 .to(dtype=torch.float16) 启用 FP16 训练,需 GPU 支持。
  4. 避免常见错误

    • 在 requires_grad=False 的张量上调用 .backward() 会报错。
    • 确保计算图的 grad_fn 链未被意外切断。

总结

PyTorch 张量的属性和方法设计旨在简化深度学习开发流程,同时保持灵活性和高效性。理解这些属性(尤其是梯度相关和设备管理)对编写高性能模型至关重要。建议结合官方文档和实际案例深入学习具体用法。

 

 

相关文章:

PyTorch中Tensor对象的属性和方法

目录 一、核心属性 复数支持 转置与视图操作 ​元信息 ​梯度相关 ​二. 常用方法 ​基本操作 ​转置与视图 ​数学运算 ​深度学习相关 ​3. 使用示例 ​梯度计算 ​设备管理 ​自定义反向传播 ​4. 注意事项 ​总结 一、核心属性 1.requires_grad: _bool: 该…...

C++20 格式化库:强大的字符串格式化工具

文章目录 格式化语法常见用法1. 填充和对齐2. 数值格式化3. 进制格式化4. 自定义类型 示例代码注意事项 C20 的格式化库是一个强大的工具,用于处理字符串的格式化操作。它提供了类似于 Python 中 str.format() 的功能,但语法和用法更符合 C 的风格。以下…...

[傻瓜式教学]如何将MathType公式编辑器内嵌到WPS工具栏中

[傻瓜式教学]如何将MathType公式编辑器内嵌到WPS工具栏中 将MathType公式编辑器内嵌到WPS工具栏中 下载好所需文件 我用夸克网盘分享了「mathtype安装教程超简单易上手.zip」,点击链接即可保存。打开「夸克APP」 链接:https://pan.quark.cn/s/4726c684…...

分析TCP三次握手与四次挥手

TCP(传输控制协议)通过三次握手建立连接,四次挥手终止连接,确保数据传输的可靠性。 TCP的三个控制标志位: SYN——用于建立连接,同步序列号。 ACK——用于确认收到的数据。 FIN——用于终止连接。 ISN…...

【深度学习】宠物品种分类Pet Breeds Classifier

文章目录 宠物品种数据集制作宠物品种标签图像预处理Presizing 损失函数loss观察模型的性能提升模型的性能learning rate finder使用CLR算法训练选择学习率的策略重新训练 迁移学习微调fine_tunefit_one_cycle有判别力的学习率 选择epoch的数量更深的网络架构 宠物品种数据集 …...

【从零开始学习计算机科学】HLS算子调度

算子调度 调度是HLS 中的核心问题,为无时序或部分时序的输入指定时钟边界,其对最终结果质量具有很大的影响。调度会影响时钟频率、延时、吞吐率、面积、功耗等多种因素。 调度的输入是控制数据流图,其节点表示算子/操作,有向边表示数据依赖,控制依赖,优先依赖。如果没有…...

centos 安装composer 教程

打开命令行 php -r "copy(https://getcomposer.org/installer, composer-setup.php);" sudo php composer-setup.php --install-dir/usr/local/bin --filenamecomposer composer --version sudo chmod us /usr/local/bin/composer Super18120/article/details/14388…...

C语言_数据结构总结2:动态分配方式的顺序表

0——静态分配内存的顺序表和动态分配内存的顺序表的相同之处和不同之处 相同之处 基本操作逻辑相同:无论是静态分配还是动态分配的顺序表,其核心的操作逻辑是一致的。例如插入操作都需要将插入位置之后的元素依次后移,删除操作都需要将删除…...

嵌入式人工智能应用-第6章 人脸检测

嵌入式人工智能应用 人脸检测 嵌入式人工智能应用1 人脸检测1.1 CNN 介绍1.2 人脸检测原理1.3 MTCNN介绍1.4 NCNN介绍2 系统安装2.1 安装依赖库NCNN2.2 运行对应的库3 总结1 人脸检测 1.1 CNN 介绍 卷积神经网络。卷积是什么意思呢?从数学上说,卷积是一种运算。它是我们学习…...

关于无感方波启动预定位阶段

一、预定位的核心目标与原理 消除启动不确定性 无位置传感器下,转子初始位置未知,直接换相可能导致反转或失步。预定位通过施加固定方向磁场,强制转子对齐至预定角度(通常0或60电角度),建立初始位置基准。 …...

WSL安装及问题

1 概述 Windows Subsystem for Linux(简称WSL)是一个在Windows 10\11上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,开发人员可以在 Windows 计算机上同时访问 Windows 和…...

MySQL中的脏读与幻读:概念、影响与解决方案

在数据库事务处理中,脏读和幻读是两种常见的并发问题,可能导致数据不一致或逻辑错误。本文将结合实际场景,深入解析两者的原理及解决方案。 一、脏读(Dirty Read) 1. 概念解析 脏读指一个事务读取了另一个事务未提交…...

基于SpringBoot的商城管理系统(源码+部署教程)

运行环境 数据库:MySql 编译器:Intellij IDEA 前端运行环境:node.js v12.13.0 JAVA版本:JDK 1.8 主要功能 基于Springboot的商城管理系统包含管理端和用户端两个部分,主要功能有: 管理端 首页商品列…...

HeidiSQL:一款免费的数据库管理工具

HeidiSQL 是一款免费的图形化数据库管理工具,支持 MySQL、MariaDB、Microsoft SQL、PostgreSQL、SQLite、Interbase 以及 Firebird,目前只能在 Windows 平台使用。 HeidiSQL 的核心功能包括: 免费且开源,所有功能都可以直接使用。…...

Ae 效果详解:VR 色差

Ae菜单:效果/沉浸式视频/VR 色差 Immersive Video/VR Chromatic Aberrations VR 色差 VR Chromatic Aberrations效果用于模拟镜头色散现象,在 VR 视频中制造 RGB 通道错位的色彩偏移,以增强视觉风格或创造数字失真效果。 本效果适用于所有色深…...

计算机毕业设计SpringBoot+Vue.js制造装备物联及生产管理ERP系统(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

Ubuntu 安装docker docker-compose

Docker 通过提供轻量级、可移植且高效的解决方案,简化了软件开发和部署。“docker build”命令是 Docker 镜像创建过程的核心。本文将探讨 Docker 构建命令、用法以及 Docker 构建的优化。 Docker 构建有什么作用? Docker build 是一个命令行界面 CLI命…...

【Linux内核系列】:深入解析输出以及输入重定向

🔥 本文专栏:Linux 🌸作者主页:努力努力再努力wz ★★★ 本文前置知识: 文件系统以及文件系统调用接口 用c语言简单实现一个shell外壳程序 内容回顾 那么在此前的学习中,我们对于Linux的文件系统已经有了…...

【linux网络编程】端口

一、端口(Port)概述 在计算机网络中,端口(Port) 是用来标识不同进程或服务的逻辑通信端点。它类似于一座大楼的房间号,帮助操作系统和网络协议区分不同的应用程序,以便正确地传输数据。 1. 端口…...

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

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

软件测试的基础入门(二)

文章目录 一、软件(开发)的生命周期什么是生命周期软件(开发)的生命周期需求分析计划设计编码测试运行维护 二、常见的开发模型瀑布模型流程优点缺点适应的场景 螺旋模型流程优点缺点适应的场景 增量模型和迭代模型流程适应的场景…...

Springboot + minio

参考&#xff1a; SpringBoot整合Minio_springboot minio-CSDN博客 <!--minio 依赖--><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.11</version></dependency> applicaio…...

地下变电站如何实现安全智能运营-以110kV站为例看环境监测与设备联控

1、地下变电站简介 在经济发达的地区&#xff0c;由于城市中心土地资源紧张、征地拆迁费用昂贵&#xff0c;因此采用地下变电站来解决这些问题不失为一个好的途径和思路。地下变电站一般采用室内全封闭式组合电气设备&#xff0c;&#xff12;&#xff12;&#xff10;&#x…...

windows无界面后台定时任务 (重启自启动,ODBS为例)

一、前言 mdb(Microsoft Database)是Microsoft Access中使用的一种数据存储格式,可以通过ODBC驱动程序进行访问和操作,在Python中也可以安装相应模块打开。 这是我在项目中更新bs数据的一个实践记录,结合windows定时一起记录一下,方便以后照搬~ 二、安装 Python安装库…...

FPGA 实验报告:四位全加器与三八译码器仿真实现

目录 安装Quartus软件 四位全加器 全加器、半加器 半加器&#xff1a; 全加器&#xff1a; 四位全加器电路图 创建项目 半加器 全加器 四位全加器 代码实现 半加器 全加器 四位全加器 三八译码器 创建项目 代码展示 modelsim仿真波形图 四位全加器 三八译码…...

win11 Visual Studio 17 2022源码编译 opencv4.11.0 + cuda12.6.3 启用GPU加速

win11 Visual Studio 17 2022 源码编译 opencv4.11.0 cuda12.6.3 启用GPU加速 配置: 生成 opencv 生成 opencv-python 1 下载源码和安装软件 win11 x64 系统 安装Visual Studio 17 2022 下载opencv4.11.0 源码 https://github.com/opencv/opencv/releases/tag/4.11.0 下载…...

Ribbon实现原理

文章目录 概要什么是Ribbon客户端负载均衡 RestTemplate核心方法GET 请求getForEntitygetForObject POST 请求postForEntitypostForObjectpostForLocation PUT请求DELETE请求 源码分析类图关系 与Eureka结合重试机制 概要 什么是Ribbon Spring Cloud Ribbon是一个基于HTTP和T…...

MuMu-LLaMA:通过大型语言模型进行多模态音乐理解和生成(Python代码实现+论文)

MuMu-LLaMA 模型是一种音乐理解和生成模型&#xff0c;能够进行音乐问答以及从文本、图像、视频和音频生成音乐&#xff0c;以及音乐编辑。该模型利用了用于音乐理解的 MERT、用于图像理解的 ViT 和用于视频理解的 ViViT 等编码器&#xff0c;以及作为音乐生成模型&#xff08;…...

高效Android MQTT封装工具:简化物联网开发,提升性能与稳定性

在Android开发中&#xff0c;封装MQTT工具可以帮助简化与MQTT服务器的通信。MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的发布/订阅消息传输协议&#xff0c;常用于物联网&#xff08;IoT&#xff09;设备之间的通信。 以下是一个简单的MQ…...

数据库原理7

1.“数据库系统运行与维护工具”的研究属于数据库管理系统软件 2.1970年IBM公司的高级研究员E.F.Codd提出了关系数据模型 3.每个属性的属性值是不可分解的&#xff0c;即关系的每个分量必须是一个不可分的数据项。属性值的取值应满足域完整性约束。 4.视图作用&#xff1a;简…...