学习资料1:https://pan.baidu.com/s/1Q56wzkCV5qpMUT6-xia1LA 提取码: y7m7 学习资料2:https://share.weiyun.com/nsgcbkza 密码:grban3
一、PyTorch环境的配置及安装 1.官网下载最新版Anaconda,完成后打开Anaconda Prompt,显示(base)即安装成功 2.conda create -n pytorch python=3.6建立一个命名为pytorch的环境,且环境python版本为3.6 3.conda activate pytorch激活并进入pytorch这个环境;linux:source activate pytorch 4.pip list来查看环境内安装了哪些包,可以发现并没有我们需要的pytorch 5.打开PyTorch官网,直接找到最新版pytorch指令conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch(无脑最新版就完事了。。。。老版本调了半天,最后还出问题了),打开pytorch环境,输入指令下载安装 6.检验是否安装成功。输入python,import torch不报错即pytorch安装成功。输入torch.cuda.is_available(),若返回True即机器显卡是可以被pytorch使用的(如失败,建议去英伟达官网下载更新驱动程序,并删除环境,使用各种最新版重新安装)。 7.linux服务器安装时出现环境安装不到conda/envs下,而在.conda下,进行如下操作
二、为什么选择Pytorch 简洁:PyTorch 的设计追求最少的封装,尽量避免重复造轮子。PyTorch的源码只有TensorFlow的十分之一左右,更少的抽象、更直观的设计使得PyTorch的源码十分易于阅读。 速度:PyTorch 的灵活性不以速度为代价,在许多评测中,PyTorch 的速度表现胜过 TensorFlow和Keras 等框架。 易用:PyTorch 是所有的框架中面向对象设计的最优雅的一个。PyTorch的面向对象的接口设计来源于Torch,而Torch的接口设计以灵活易用而著称。 生态丰富:PyTorch 提供了完整的文档,循序渐进的指南,此外,相关社区还在逐渐壮大。 步骤1:创建数据 Tensors张量是一种特殊的数据结构,它和数组还有矩阵十分相似。在Pytorch中,Tensors可以在gpu或其他专用硬件上运行来加速计算之外,其他用法类似Numpy。 import torch import numpy as np #直接从数据创建 data = [[1, 2], [3, 4]] x_data = torch.tensor(data) x_data.shape #全为1 x_ones = torch.ones_like(x_data) # retains the properties of x_data print(f"Ones Tensor: \n {x_ones} \n") #全为0 x_rand = torch.rand_like(x_data, dtype=torch.float) # overrides the datatype of x_data print(f"Random Tensor: \n {x_rand} \n") #查看tensor类型 tensor = torch.rand(3, 4) print(f"Shape of tensor: {tensor.shape}“) print(f"Datatype of tensor: {tensor.dtype}”) print(f"Device tensor is stored on: {tensor.device}")
步骤2:自动梯度计算 在Pytorch中可以使用tensor进行计算,并最终可以从计算得到的tensor计算损失,并进行梯度信息。在Pytorch中主要关注正向传播的计算即可。 #x = torch.ones(2, 2, requires_grad=True) x = torch.tensor([[1, 2], [3, 4]], dtype=float, requires_grad=True) print(x) y = x + 2 print(y) print(y.grad_fn) # y就多了一个AddBackward z = y * y * 3 out = z.mean() print(z) # z多了MulBackward print(out) # out多了MeanBackward #计算公式:out = 0.25 ((x+2) * (x+2) * 3) out.backward() print(x.grad)
步骤3:拟合曲线 接下来我们将尝试使用Pytorch拟合一条曲线,我们首先的创建待你和的参数,并加载待训练的数据。 #需要计算得到的参数 w = torch.ones(1, requires_grad=True) b = torch.ones(1, requires_grad=True) #数据 x_tensor = torch.from_numpy(x) y_tensor = torch.from_numpy(y) #目标模型 #y = wx + b 定义损失 def mse(label, pred): diff = label - pred return torch.sqrt((diff ** 2).mean()) pred = x_tensor * w + b loss = mse(y_tensor, pred) #执行20次参数更新 for _ in range(20):
重新定义一下,梯度清空
w = w.clone().detach().requires_grad_(True) b = b.clone().detach().requires_grad_(True)
正向传播
pred = x_tensor * w + b
计算损失
loss = mse(y_tensor, pred) print(loss)
计算梯度
loss.backward()