Pytorch小结
官方文档:官方帮助
Pytorch安装(Windows)
使用anaconda管理工具安装,命令为:
conda install pytorch torchvision
安装时常常会找不到资源,建议添加清华源镜像之后再执行上述命令,添加方式如下:
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
张量(Tensor)
PyTorch 在很多方面的行为都和 Numpy 数组很像。这些 Numpy 数组毕竟只是张量。PyTorch 采用这些张量并使我们能够轻松地将张量移到 GPU 中,以便在训练神经网络时加快处理速度。它还提供了一个自动计算梯度(用于反向传播!)的模块,以及另一个专门用于构建神经网络的模块。
神经网络计算只是对张量进行一系列线性代数运算,矩阵是张量的一种形式。向量是一维张量,矩阵是二维张量,包含 3 个索引的数组是三维张量(例如 RGB 颜色图像)。神经网络的基本数据结构是张量,PyTorch(以及几乎所有其他深度学习框架)都是以张量为基础。
创建
张量默认数据类型为torch.FloatTensor,可以使用Torch.dtype修改。还可以使用Torch.device修改变量位置(CPU 或者 GPU),以实现CPU或者GPU计算。
>>> torch.zeros([2, 4], dtype=torch.int32)
tensor([[ 0, 0, 0, 0],
[ 0, 0, 0, 0]], dtype=torch.int32)
>>> cuda0 = torch.device('cuda:0')
>>> torch.ones([2, 4], dtype=torch.float64, device=cuda0)
tensor([[ 1.0000, 1.0000, 1.0000, 1.0000],
[ 1.0000, 1.0000, 1.0000, 1.0000]], dtype=torch.float64, device='cuda:0')
方法
x = torch.rand(3, 2)
x
y = torch.ones(x.size())
y
z = x + y
z
z[0]
z[:, 1:]
输出为:
tensor([[0.9867, 0.1393],
[0.6275, 0.8997],
[0.7182, 0.8201]])
tensor([[1., 1.],
[1., 1.],
[1., 1.]])
tensor([[1.9867, 1.1393],
[1.6275, 1.8997],
[1.7182, 1.8201]])
tensor([1.9867, 1.1393])
tensor([[1.1393],
[1.8997],
[1.8201]])
张量通常有两种类型的方法,一种方法返回另一个张量,另一种方法原地执行运算。即该张量在内存中的值发生了改变,没有创建新的张量。原地函数始终带有下划线,例如 z.add() 和 z.add_()。
z.add(1)
z
z.add_(1)
z
输出为:
tensor([[2.9867, 2.1393],
[2.6275, 2.8997],
[2.7182, 2.8201]])
tensor([[1.9867, 1.1393],
[1.6275, 1.8997],
[1.7182, 1.8201]])
tensor([[2.9867, 2.1393],
[2.6275, 2.8997],
[2.7182, 2.8201]])
tensor([[2.9867, 2.1393],
[2.6275, 2.8997],
[2.7182, 2.8201]])
改变张量的形状是一个很常见的运算。首先使用 .size()获取张量的大小和形状。然后,使用 .resize_()改变张量的形状。注意下划线,改变形状是原地运算。
z.size()
z.resize_(2, 3)
输出为:
torch.Size([