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

 

 


http://www.kler.cn/a/581511.html

相关文章:

  • MATLAB中hilbert函数用法
  • 深度学习基础:线性代数的本质1——深入理解向量
  • MySQL中的Performance Schema性能监控组件
  • 【AI基础】从零开始:Chroma向量数据库构建高效AI应用全攻略
  • 5G基本概念
  • ROS实践(二)机器人模型描述文件urdf
  • 面试之《原型与原型链》
  • LLM剪枝代码解释与实现
  • 企业4A数字化架构演进与治理方案(122页PPT)
  • 【RocketMQ 存储】- 异常退出恢复逻辑 recoverAbnormally
  • RabbitMQ之旅(2)
  • jumpserver 网络安全 网络安全 authenticity
  • VanillaVueSvelteReactSolidAngularPreact前端框架/库的简要介绍及其优势
  • MicroPython 智能硬件开发完整指南
  • Unity DOTS从入门到精通之EntityCommandBufferSystem
  • 【GPT入门】第11课 FunctionCall调用本地代码入门
  • [从零开始学习JAVA] 新版本idea的数据库图形化界面
  • 如何最好地复制MS SQL Server中的整个数据库?
  • Qt for Android(b站讯为QT教程)
  • TinyWebServer项目笔记 ——03 http连接处理(上)