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

 

 

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

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

相关文章

Java 大视界 -- Java 大数据在智能家居能源管理与节能优化中的应用(120)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

DeepSeek-R1本地化部署(Mac)

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

手写简易Tomcat核心实现:深入理解Servlet容器原理

目录 一、Tomcat概况 1. tomcat全局图 2.项目结构概览 二、实现步骤详解 2.1 基础工具包(com.qcby.util) 2.1.1 ResponseUtil:HTTP响应生成工具 2.1.2 SearchClassUtil:类扫描工具 2.1.3 WebServlet:自定义注解…

OpenHarmony子系统开发编译构建指导

OpenHarmony子系统开发编译构建指导 概述 OpenHarmony编译子系统是以GN和Ninja构建为基座,对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统,该系统提供以下基本功能: 以部件为最小粒度拼装产品和独…

红日靶场(一)——个人笔记

说明: 红日靶场官网 http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ 靶场默认密码 hongrisec2019 预留空间 【攻击机Kail_2023.3】70G 【靶场win7】32G 【靶场Win2K3 】11G 【靶场winserver08】23G 环境搭建 修改VMnet1、VMnet2网卡的地址 将VMnet1作为内…

网络基础(一)【网络发展/认识协议/网络 VS 系统/以太网通信原理/重谈协议/网络中的地址管理】

网络基础(一) 1. 网络的发展2. 认识协议3. 网络 VS 系统4. 以太网通信原理5. 重谈协议6. 网络中的地址管理 1. 网络的发展 最开始时,计算机之间相互独立。 但是为了协作完成一些任务,就产生了计算机之间相互通讯的需求&#xff0c…

【ESP-IDF】组件

前言 对于要封装自己的库,在ESP-IDF中,可以采用构建组件的方式导入,而不是单纯在文件夹下导入.h和.c文件,不然一旦要导入的文件过多,它们背后的依赖可能就会相互交叉,不在方便移除和复用。本文就分别讲述&a…

AR配置静态IP双链路负载分担示例

AR配置静态IP双链路负载分担示例 适用于大部分企业网络出口 业务需求: 运营商1分配的接口IP为100.100.1.2,子网掩码为255.255.255.252,网关IP为100.100.1.1。 运营商2分配的接口IP为200.200.1.2,子网掩码为255.255.255.248&am…

视觉 Yolov11 环境配置(GPU版)

虚拟环境 首先用 anaconda 创建虚拟环境 根据自己需求创建一个虚拟环境 一个环境名叫 yolov11-py-3-8 就创建好了,后续的 yolov11 就会以这个环境去做深度学习(这里不建议把环境的 py 版本设置到最新,设置个 3.8 或者 3.10 完全够用了 &am…

【微知】如何命令行查看Linux上连接的Wi-Fi信息?(iw dev wlp4s0 link ; information wireless)

背景 有时候没有桌面查看wifi链接,如何命令行查看 命令 iw dev wlp4s0 linkman手册: 实操 综述 如果查看信号强度、协商速率日常使用中比较常用。

从0到1入门Linux

一、常用命令 ls 列出目录内容 cd切换目录mkdir创建新目录rm删除文件或目录cp复制文件或目录mv移动或重命名文件和目录cat查看文件内容grep在文件中查找指定字符串ps查看当前进程状态top查看内存kill终止进程df -h查看磁盘空间存储情况iotop -o直接查看比较高的磁盘读写程序up…

[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(2)实操部署

标题:[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(2)实操部署 水墨不写bug 文章目录 一、无法拷贝类(class uncopyable)的设计解释:重要思想:使用示例 二、锁的RAII设计解释重要考虑使用示例 三、基于RAII模式和互斥锁…

登录固定账号和密码:账号:hmheima

接口文档 【apifox】面试宝典 个人中心-保存用户数据信息 - 教学练测项目-面试宝典-鸿蒙 登录固定账号和密码: 账号:hmheima 密码:Hmheima%123 UI设计稿 【腾讯 CoDesign】面试宝典 CoDesign - 腾讯自研设计协作平台 访问密码&#xff1…

Docker和DockerCompose基础教程及安装教程

Docker的应用场景 Web 应用的自动化打包和发布。自动化测试和持续集成、发布。在服务型环境中部署和调整数据库或其他的后台应用。从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。 CentOS Docker 安装 使用官方安装脚本自动安装 安装命令…

C语言学习笔记-进阶(7)字符串函数3

1. strstr的使用和模拟实现 char * strstr ( const char * str1, const char * str2); Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1. (函数返回字符串str2在字符串str1中第⼀次出现的位置&#x…

Elasticsearch为索引设置自动时间戳,ES自动时间戳

文章目录 0、思路1、配置 ingest pipeline2、在索引映射中启用_source字段的时间戳3、使用 index template 全局设置时间戳4、写入测试数据5、验证结果6、总结 在使用 Elasticsearch 进行数据存储和检索时,时间戳字段是一个非常重要的组成部分。它可以帮助我们追踪数…

2024四川大学计算机考研复试上机真题

2024四川大学计算机考研复试上机真题 2024四川大学计算机考研复试机试真题 历年四川大学计算机考研复试机试真题 在线评测:https://app2098.acapp.acwing.com.cn/ 分数求和 题目描述 有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13… 求出这个数列的前 …

韩国互联网巨头 NAVER 如何借助 StarRocks 实现实时数据洞察

作者: Youngjin Kim Team Leader, NAVER Moweon Lee Data Engineer, NAVER 导读:开源无国界,在“StarRocks 全球用户精选案例”专栏中,我们将介绍韩国互联网巨头 NAVER 的 StarRocks 实践案例。 NAVER 成立于 1999 年&#xff0…

VanillaVueSvelteReactSolidAngularPreact前端框架/库的简要介绍及其优势

VanillaVueSvelteReactSolidAngularPreact前端框架/库的简要介绍及其优势。以下是这些前端框架/库的简要介绍及其优势: 1. Vanilla 定义:Vanilla 并不是一个框架,而是指 原生 JavaScript(即不使用任何框架或库)。优势…

图像滑块对比功能的开发记录

背景介绍 最近,公司需要开发一款在线图像压缩工具,其中的一个关键功能是让用户直观地比较压缩前后的图像效果。因此,我们设计了一个对比组件,它允许用户通过拖动滑块,动态调整两张图像的显示区域,从而清晰…