目录
一、核心属性
复数支持
转置与视图操作
元信息
梯度相关
二. 常用方法
基本操作
转置与视图
数学运算
深度学习相关
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. 注意事项
-
视图与拷贝:
- 视图操作(如切片、转置)不会复制数据,修改视图会影响原张量。
- 使用
.clone()或.copy()创建独立副本。
-
内存优化:
- 优先使用视图操作(如
.reshape())而非复制数据。
- 优先使用视图操作(如
-
混合精度训练:
- 通过
.to(dtype=torch.float16)启用 FP16 训练,需 GPU 支持。
- 通过
-
避免常见错误:
- 在
requires_grad=False的张量上调用.backward()会报错。 - 确保计算图的
grad_fn链未被意外切断。
- 在
总结
PyTorch 张量的属性和方法设计旨在简化深度学习开发流程,同时保持灵活性和高效性。理解这些属性(尤其是梯度相关和设备管理)对编写高性能模型至关重要。建议结合官方文档和实际案例深入学习具体用法。

![[傻瓜式教学]如何将MathType公式编辑器内嵌到WPS工具栏中](https://i-blog.csdnimg.cn/direct/e03c6749ab8b4c91b1bf1f35136d17b9.png)

















