PyTorch 学习

PyTorch的基本概念

1.什么是PyTorch,为什么选择PyTorch?
2.PyTorch的安装(配置Python 环境,准备Python 管理器,通过命令行安装Pytorch)
3.PyTorch基础概念
通过代码实现流程(实现一个深度学习的代码流程)

1.什么是PyTorch,为什么选择Pytroch?

PyTorch是一个基于Torch的Python开源机器学习库,作为NumPy的替代品,不仅能够实现强大的GPU 加速,同时还支持动态神经网络。
它主要由Facebook人工智能研究小组开发。已经被Twitter、CMU 和Salesforce 等机构采用,Uber的"Pyro"也使用的这个库。
PyTorch是一个Python包,提供两个高级功能:

  1. 具有强大的GPU加速的张量计算(如NumPy)
  2. 拥有自动求导功能的强大的深度神经网络

为什么选择Pytroch?
  1. Tensorflow 与Caffe 都是命令式的编程语言,而且是静态的,首先必须构建一个神经网络,然后一次又一次使用同样的结构,如果想要改变网络的结构,就必须从头开始。但是对于PyTorch,通过一种反向自动求导的技术,可以让你零延迟地任意改变神经网络的行为,尽管这项技术不是PyTorch 独有,但目前为止它实现是最快的,能够为你任何疯狂想法的实现获得最高的速度和最佳的灵活性,这也是PyTorch 对比Tensorflow 最大的优势。
  2.PyTorch 的设计思路是线性、直观且易于使用的,当你执行一行代码时,它会忠实地执行,并没有异步的世界观,所以当你的代码出现Bug 的时候,可以通过这些信息轻松快捷地找到出错的代码,不会让你在Debug 的时候因为错误的指向或者异步和不透明的引擎浪费太多的时间。
  3.PyTorch 的代码相对于Tensorflow 而言,更加简洁直观,同时对于Tensorflow高度工业化的很难看懂的底层代码,PyTorch 的源代码就要友好得多,更容易看懂。深入API,理解PyTorch 底层肯定是一件令人高兴的事。一个底层架构能够看懂的框架,你对其的理解会更深。
  最后我们简要总结一下PyTorch 的特点:
  1)支持GPU;
  2)动态神经网络;
  3)Python 优先;
  4)命令式体验;
  5)轻松扩展。
2.PyTorch的安装
配置Python环境:安装anaconda,打开Anaconda prompt,输入conda install pytorch-cpu -c pytorch,下载packages,再输入pip install torchvision,torchvision安装成功。验证是否下载成功:打开Anaconda jupyter notebook,输入print(import torch),print(import torchvision),print(torch)不报错即可。
或者进官网,按命令行执行安装,https://pytorch.org/
PyTorch 学习
PyTorch 学习
3.PyTorch基础概念
PyTorch 学习
4.PyTorch实现流程
任务是通过神经网络完成一个回归问题。其中样本数为64个,输入层为1000维,隐藏层为100,输出层为10维。

num_samples = 64 # N
dim_in, dim_hid, dim_out = 1000, 100, 10  # IN Hider OUT
x = torch.randn(num_samples, dim_in)  #  N * IN
y = torch.randn(num_samples, dim_out) #  N * OUT

# 提前定义模型
model = torch.nn.Sequential(
    torch.nn.Linear(dim_in, dim_hid, bias = False), #model[0]
    torch.nn.ReLU(),
    torch.nn.Linear(dim_hid, dim_out, bias = False),#model[2]
)
#提前定义loss函数和优化函数
loss_fun = torch.nn.MSELoss(reduction='sum')
eta = 1e-4 
optimizer = torch.optim.Adam(model.parameters(), lr=eta)


for i in range(1000):
  #Forward pass
  y_pred = model(x)
  
  #Loss
  loss = loss_fun(y_pred, y)
  print(i, loss.item())

  optimizer.zero_grad()
  # Backward pass
  loss.backward()

  # update model parameters
  optimizer.step()

PyTorch 学习