PyTorch中Tensor(张量)数据结构内部观察-LMLPHP

上图中是一个张量embeds,打开其内部存储空间,我们可以看到内部的构成。在PyTorch中,Tensor 具有许多属性和方法。以下是其中一些关键的属性和方法:

属性:

  1. H

    在标准的PyTorch API中并没有直接表示为 .H 的属性,但在数学或某些库(如NumPy)中,.H 通常代表共轭转置(Conjugate Transpose),也称为Hermitian conjugate。在处理复数张量时,如果需要进行共轭转置操作,在PyTorch中应先使用 .conj() 方法获取复共轭,然后用 .T 进行转置,即 tensor.conj().T
  2. T

    .T 属性用于转置(Transpose)张量,它会改变张量的维度顺序。例如,对于二维张量(矩阵),转置会交换行和列的位置。
  3. .data

    返回一个与原张量共享相同存储区的新张量视图,通常用于直接访问底层数据而不涉及计算历史。
  4. .device

    返回一个 torch.device 对象,表示张量所在设备(CPU或GPU)。
  5. .dtype

    返回一个 torch.dtype 对象,代表张量元素的数据类型(如 torch.float32, torch.long 等)。
  6. .grad

    如果该张量是需要求梯度的一部分,则返回与该张量相关的梯度张量;否则为 None
  7. .requires_grad

    返回一个布尔值,表明此张量是否参与自动求导过程。
  8. .shape 或 .size()

    返回一个包含张量各维度大小的元组,表示张量的形状。
  9. .stride

    返回一个元组,表示沿着各个维度移动一个元素所需的步长。
  10. .is_contiguous()

    判断当前张量是否连续存储在内存中。
  11. .layout(高级用法):

    在某些特殊情况下,如使用MKLDNN等优化库时,描述张量的布局方式。

方法:

  1. .view(*shape) 或 .reshape(*shape)

    改变张量的维度大小,但不改变其实际数据内容。
  2. .transpose(dim0, dim1) 或 .t()

    对张量进行转置操作。
  3. .to(device, dtype=None, non_blocking=False)

    将张量转移到指定设备上或者更改数据类型。
  4. .clone()

    创建一个与原张量有相同数据的新张量,数据独立于原张量存储。
  5. .copy_(src)

    从源张量拷贝数据到当前张量。
  6. .detach()

    创建一个新的张量,与原张量数据相同但切断了计算图中的依赖关系。
  7. .numpy()

    转换张量为NumPy数组。
  8. .sum(dim=None, keepdim=False).mean(dim=None, keepdim=False) 等统计函数

    计算张量沿指定维度的和、平均数等统计量。
  9. .zero_().fill_(value) 等修改张量数值的方法

    直接对张量内部数据进行操作,例如清零所有元素或填充特定值。
  10. 对于深度学习模型训练相关的

    • .backward():执行反向传播计算梯度。
    • .requires_grad_(requires_grad=True):动态地设置张量是否要求梯度。

这些只是一部分基本和常用的属性及方法,实际上还有很多其他功能丰富的成员函数,可以根据实际需求查阅官方文档以获取完整列表和详细说明。

02-27 08:17