初识PyTorch
张量计算
-
定义张量
-
张量的运算
两个张量的矩阵乘法,需要调用PyTorch的 mm (即matrix multiply的意思)命令,它的作用就是矩阵相乘。
其中,y.t 表示矩阵y的转置。
张量的基本运算还有很多,包括相加(与numpy相同)、换位、索引、切片、数学运算、线性算法和随机数等,详见PyTorch官方文档。 -
张量与NumPy数组之间的转换
从numpy到张量的转换可以使用 from_numpy(a),其中 a 为一个numpy数组。反过来,从张量到numpy的转换可以使用 a.numpy(),其中 a 为一个PyTorch张量。
除了这种直接转换,大多数时候还需要按照类型进行转换。例如,可以用torch.FloatTensor(a)将numpy类型的数组a转化为一个float类型的张量。与此类似,可以用torch.LongTensor(a)将numpy类型的数组a转化为一个整数类型的张量。 -
GPU上的张量运算
PyTorch 中的很多张量运算与NumPy 中的数组运算一样,那么 PyTorch 为什么还要发明张量而不直接用NumPy 的数组呢?答案是,PyTorch中的张量可以在 GPU 中计算,这大大提高了运算速度,而 NumPy数组却不能。
首先,要完成GPU上的运算,需要确认你的计算机已经安装了GPU并且可以正常操作。可以用如下方法进行验证:
torch.cuda.is_available()
如果返回True就表明GPU已经正常安装,否则将无法使用GPU。当确认可以使用之后,你只需要将定义的张量放置到GPU上即可。例如,将 x、y放到GPU上,你只需要输入如下代码即可:
if torch.cuda.is_available():
x = x.cuda()
y = y.cuda()
print(x+y)
返回如下:
tensor([[-0.5796, -0.2013, 0.8858],
[ 2.3588, 0.0218, -0.2338]], device='cuda:0')
注意,最后一行多出来的 cuda:0表明当前这个输出结果 x+y是存储在GPU上的。
当然,你的计算机版本设置可能不支持GPU,如果你希望获得GPU 资源,可以考虑在云服务器平台上运行。
我们也可以将已存储在 GPU上的变量再 “卸载”到CPU上,只需要输人以下命令即可:
x = x.cpu()
如果你的计算机本来就没有GPU,那么执行上述语句就会报错,所以最好是在前面加上 if torch.cuda.is_available() 进行判断。