PyTorch
PyTorch是一个开源的python机器学习库
PyTorch的前身是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵
活,支持动态图,而且提供了Python接口。它是由Torch7团队开发,是一个以Python优先的深度学习
框架,不仅能够实现强大的GPU加速,同时还支持动态神经网络。
PyTorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神
经网络。除了Facebook外,它已经被Twitter、CMU和Salesforce等机构采用
优点:
- PyTorch语法非常简洁并且高效
- 设计追求最少的封装
- 设计符合人类思维,它让用户尽可能地专注实现自己的想法
- Pytorch作者亲自维护社区
- 入门简单,便于学习
环境搭建
- 在conda环境中创建虚拟环境
conda create -n torchenv python=3.8
- 激活当前环境
conda activate torchenv
- 访问pytorch的官网
pytorch.org按照官网提示选择对应的版本进行安装
注:如果您的电脑支持CUDA并且显存大于2G,可以安装CUDA版本,在机器学习的过程中效率会高一点

同时我们还需要安装Cuda驱动, 我安装的是cuda11 所以上面我选的也是11
cuda_11.4.0_471.11_win10.exe
如果您的电脑显卡不支持cuda,那还可以安装CPU版本

在虚拟环境中安装jupyter notebook
pip install jupyter
安装jupyter notebook的提示功能
pip install jupyter_contrib_nbextensionsjupyter contrib nbextension install --userpip install --user jupyter_nbextensions_configuratorjupyter nbextensions_configurator enable --user
在命令行中启动jupyter notebook

下面我们就从Pytorch中最最基础的类型开始进行学习,只要大家认真跟着本系列教程学习,多加练习,相信大家对机器学习有一个直观的认识。
张量
PyTorch中的所有操作都是在张量的基础上进行的, 本实验主要讲解了张量的定义和相关张量操作以及GPU和张量之间的关系, 为以后使用PyTorch进行深度学习打下坚实的基础
张量的定义
PyTorch中所有内容都基于Tensor张量来操作的.张量可以鱼油不同的尺寸,可以是1维,2维,3维,甚至N维的数据.下面我们就一起来学习一下张量的定义
import torchx = torch.empty(1)print(x.size())y = torch.empty(3)print(y.size())z = torch.empty(2,3)print(z.size())
- 创建随机的张量
torch.randn(2,3) # 初始化一个符合正态分布的张量
- 创建全0或者全1的张量
a = torch.zeros(2,3)b = torch.ones(2,3)
- 获取张量的大小/尺寸
a.size()
- 查看张量的数据类型
a.dtype
- 在创建张量的时候,指定类型
a = torch.zeros(2,3,dtype=torch.float16)print(a)print(a.dtype)
- 创建指定值的张量,我们需要用到torch.tensor(list)
x = torch.tensor([5.5, 3])
- 如果想定义的张量能够自动计算梯度,那么我们就需要将参数requires_grad置为True
torch.tensor([5.5, 3], requires_grad=True)
张量的运算
- 加法
x = torch.rand(2, 2)y = torch.rand(2, 2)z = x + yprint(z)
- 减法
z = x - yprint(z)z = torch.sub(x,y)print(z)
- 乘法
z = x * yprint(z)z = torch.mul(x, y)print(z)
- 除法
z = x / yprint(z)z = torch.div(x, y)print(z)
张量的切片
x = torch.rand(5,3)print(x)print(x[1, 1])print(x[:, 0])print(x[1, :])
张量的形变
将原张量的形状进行变换,即元素总个数不变的情况下改变行数和列数, 使用torch.view(size)类似numpy.reshape
x = torch.randn(4, 4)y = x.view(16)z = x.view(2, 8)print(x.size(), y.size(), z.size())
例如x的形状为12 x 23 x 100, 而我们想把x转为2 x M 的大小时,我们就必须手动算出12 x 23 x 100 的值, 然后除以2, 进而得到M的值
为了避免这种情况, 我们可以将M所在位置赋值为-1. 计算机看到-1时, 会自动使用12 x 23 x 100 / 2 的值来替换-1
x = torch.randn(12,13,100)y = x.view(2,-1)print(x.size(), y.size())
Numpy与Tensor的互转
使用tensor.numpy() 将Tensor类型的变量转为Numpy类型:
a = torch.ones(5)print(a)b = a.numpy()print(type(b))
使用torch.from_numpy() 将Numpy类型转为Tensor:
import numpy as npa = np.ones(5)b = torch.from_numpy(a)print(type(b))
