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.jacobiantorch.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(), 可用于高于二维的矩阵,
将最后两维转职后的共轭矩阵的试图。