Pytorch

PyTorch张量

PyTorch张量torch.Tensor表示高维数组结构,方法参考numpy.ndarray,张量运算方法可以通过torch模块和/或张量对象访问。

x = torch.tensor([1,2,3],dtype=torch.float32)
x = torch.arange(0,12).reshape(3,4)
x.numel()   # => np.size

张量对象变换:

torch.concat(X,Y,dim=0)  # <=> torch.cat() => np.concatenate()

张量与ndarray相互转换(.numpy.from_numpy方法共享底层内存)。

A=X.numpy()   # X=torch.Tensor(A)

对于大小为1的张量,可通过Python内置函数转换为标量。

运算

矩阵向量乘积(matrix-vector product):y=torch.mv(A,x)

矩阵乘法(matrix-matrix multiplication):C=torch.mm(A,B)

范数
x=torch.norm(u,p='fro')   # (L2) norm
x=torch.abs(u).sum()      # => L1 norm
x=torch.frobenius_norm(A) # matrix L2 norm

梯度

创建张量时可同时分配存储梯度的空间,用于后续反向求导时更新梯度值。PyTorch提供自动计算梯度的功能。

x=torch.arange(4.0,requires_grad=True)  # x.requires_grad_(True)
y.backward()  # 方向传导自动计算梯度
x.grad        # 梯度值(未计算前为None)
x.grad.zero_()# 重新计算梯度前需要清除先前的结果,默认会累积梯度
u=y.detach()  # 将u视为常量,不再反向传播