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视为常量,不再反向传播