PyTorch学习

基本要求&与其他框架比较:

软件:具有dubg功能的IDE(如PyCharm、Eclipse)、Jupyter、anaconda、Pytorch

PyTorch相比,Tensorflow的定义和规则比较多,并且在调试过程中不太方便。

pytorch 基于pt进行推理 pytorch 推理框架_反向传播

框架学习方法

不拘泥于具体操作,在实际运用的过程中查找并使用

基本使用方法

创建一个矩阵

x = torch.empty(5,3); x =torch.rand(5.3);

pytorch 基于pt进行推理 pytorch 推理框架_反向传播_02


可见,

pytorch框架 输出后的数据格式是tensor(张量)

TensorFlow框架 输出后的数据格式是ndarray展示矩阵大小 torch.size()

改变矩阵维度 view(维度)

pytorch 基于pt进行推理 pytorch 推理框架_pytorch 基于pt进行推理_03

Numpy(ndarry)和PyTorch(tensor)交互

tensor-->ndarry


ndarry-->tensor

autograd机制

为什么要用框架呢?因为自己编程太麻烦了,尤其是做反向传播的时候
在反向传播的时候,我们需要 对矩阵进行求导 这是费事费力的,如果框架帮我们做完了,我们就可以专心于模型的搭建了

requires_grad=True

pytorch 基于pt进行推理 pytorch 推理框架_pytorch 基于pt进行推理_06


pytorch 基于pt进行推理 pytorch 推理框架_反向传播_07


注意:如果梯度不清零,梯度会进行累加的!!!

所以,我们在进行梯度计算的时候,基本流程是:

**清零->梯度计算->反向传播->清零**

例子

创建两个数组x和y:

pytorch 基于pt进行推理 pytorch 推理框架_pytorch_08


pytorch 基于pt进行推理 pytorch 推理框架_pytorch 基于pt进行推理_09

建立一个模型:

pytorch 基于pt进行推理 pytorch 推理框架_反向传播_10


制定超参数&损失函数

pytorch 基于pt进行推理 pytorch 推理框架_pytorch 基于pt进行推理_11


训练模型:

目标

注解

代码

数据格式转换

把输入的数据格式转化为tensor格式

torch.from_numpy(x_train)

梯度清零

避免梯度累加出现错误

.zero_grad()

前向传播

得到预测的数据

计算损失

即预测损失与标签之间的差距

反向传播

求梯度

loss.backward()

进行参数更新

自动根据学习率和梯度对参数进行更新

.step()

过程显示

要防止显卡爆炸

loss.item

预测

模型保存

模型保存完是一个字典类型(模型不仅仅是模型,

torch.save(model.state_dict(),‘model.pkl’)

模型读取

还有可能有模型损失、结果等等都可以放进去)

model.load_state_dict(torch.load(“model.pkl”))

pytorch 基于pt进行推理 pytorch 推理框架_pytorch_12


目前最简洁的版本就做完了,有很多问题没有弄(比如我们这个代码里是一个batch就都跑完了,理论上应该是一个Batch一个Batch地跑),先不管,以后再学现在我们对模型进行测试

测试就是把数据放进训练好的网络,得到的数据肯定还是要转化一下类型的~

pytorch 基于pt进行推理 pytorch 推理框架_pytorch 基于pt进行推理_13


模型的保存

pytorch 基于pt进行推理 pytorch 推理框架_学习_14