Tensor#
向量可以进行加减乘除,并且一般有两种形式:
c = a.add(b)
c = torch.add(a, b)
, 它们一般并不修改原始向量,而是运算后生成新向量返回。向量的数学运算提供原地运算方法,一般方法名以下划线结尾, 如
a.add_(b)
, 这些运算会直接在原始向量上修改,一般会修改原始向量的方法都以下划线结尾。Tensor.to("gpu") 可以将向量转移到 gpu. 同样的 to 函数,也可以进行类型转换: Tensor.to(torch.float32)
model.eval() 函数,会递归设置所有层的
training
属性为 Falsetorch.no_grad() 会将模型的自动求梯度的功能去除,一般用于预测流程
Tensor.detatch() 会返回一个不带梯度的 Tensor。、
指定
requires_grad=True
, 如torch.tensor(..., requires_grad=True)
, 可以使向量具有求梯度的功能。使用
torch.autograd.profiler.profile
可以查看反向传播的耗时使用
torch.profiler.profile
查看 forward 耗时torch.autograd.functional.jacobian
torch.autograd.functional.vjp
模型解释 captum
混合精度 apex
操作#
T#
二维矩阵转置的视图,例如 t 是二维矩阵, b = t.T
, 则 \(b_{i,j} = t_{j,i}\)
不要使用在非二维矩阵上,对于这种场景,使用 mT
或者 permute
替代
H#
针对二维矩阵,返回转置后的共轭矩阵的视图,等价于 t.transpose(0, 1).conj()
t = torch.tensor([[1, 2+2j], [3, 4+4j]])
print(t)
#[[1.0, 2.0+2.0j],
# [3.0, 4.0+4.0j]]
print(t.transpose(0, 1))
#[[1.0 , 3.0],
# [2.0+2.0j, 4.0+4.0j]]
print(t.transpose(0, 1).conj())
#[[1.0 , 3.0],
# [2.0-2.0j, 4.0-4.0j]]
print(t.H)
#[[1.0 , 3.0],
# [2.0-2.0j, 4.0-4.0j]]
mT#
对矩阵的最后两维进行转置后的视图,例如对于三维矩阵 t: b = t.mT
,
表示 \(b_{i,j,k} = t_{i,k,j}\) ,等价于 t.transpose(-2, -1)
mH#
等价于 t.transpose(-2, -1).conj()
, 可用于高于二维的矩阵,
将最后两维转职后的共轭矩阵的试图。