初识 torch.Autograd | 理解pytorch网络训练过程 | 笔记

网友投稿 952 2022-05-30

本博文是运行 pytorch quickstart_tutorial 记录的粗糙笔记

文章目录

Disabling Gradient Tracking 禁止 梯度 跟踪

默认情况下,所有具有 requires_grad=True 的张量都在跟踪它们的计算历史并支持梯度计算。

但是,在某些情况下我们不需要这样做,例如,当我们训练了模型并且只想将其应用于某些输入数据时,即我们只想通过网络进行前向计算。

我们可以通过用 torch.no_grad() 块包围我们的计算代码来停止跟踪计算:

There are reasons you might want to disable gradient tracking【关闭梯度跟踪的原因】:

理解 y = w * X + b

Optional Reading: Tensor Gradients and Jacobian Products【梯度和雅克比积】

什么是超参数

Optimization Loop 【迭代优化】

Loss Function 【损失函数】

Optimizer 【 优化器】

Saving and Loading Model Weights 【保存 加载 模型】

Saving and Loading Models with Shapes【模型网络结构 和 参数 存储于一个 xx.pth 文件】

Exporting Model to ONNX

Disabling Gradient Tracking 禁止 梯度 跟踪

摘自 pytorch 教程

import torch z = torch.matmul(x, w)+b print(z.requires_grad) with torch.no_grad(): z = torch.matmul(x, w)+b print(z.requires_grad)

1

2

3

4

5

6

7

8

There are reasons you might want to disable gradient tracking【关闭梯度跟踪的原因】:

初识 torch.Autograd | 理解pytorch网络训练过程 | 笔记

将神经网络中的某些参数标记为冻结参数,这是微调预训练网络的一个非常常见的场景

在仅进行前向传递时加快计算速度,不对张量进行梯度跟踪,计算会更加高效

理解 y = w * X + b

Optional Reading: Tensor Gradients and Jacobian Products【梯度和雅克比积】

摘自该文档

In many cases, we have a scalar loss function, and we need to compute the gradient with respect to some parameters. However, there are cases when the output function is an arbitrary tensor. In this case, PyTorch allows you to compute so-called Jacobian product, and not the actual gradient.

在很多情况下,我们有一个标量损失函数,我们需要计算一些参数的梯度。 但是,有些情况下输出函数是任意张量。 在这种情况下,PyTorch 允许您计算所谓的雅可比积,而不是实际的梯度。

什么是超参数

超参数是可调节的参数,用来控制模型优化过程, 不同的超参数值会影响模型训练和收敛速度;

Optimization Loop 【迭代优化】

Loss Function 【损失函数】

当提供一些训练数据时,我们未经训练的网络可能不会给出正确的答案。 损失函数衡量得到的结果与目标值的不相似程度,是我们在训练过程中想要最小化的损失函数。 为了计算损失,我们使用给定数据样本的输入进行预测,并将其与真实数据标签值进行比较。

Optimizer 【 优化器】

优化是在每个训练步骤中调整模型参数以减少模型误差的过程。 优化算法定义了这个过程是如何执行的(在这个例子中我们使用随机梯度下降)。 所有优化逻辑都封装在优化器对象中。 在这里,我们使用 SGD 优化器; 此外,PyTorch 中有许多不同的优化器可用,例如 ADAM 和 RMSProp,它们更适用于不同类型的模型和数据。

在训练循环中,优化分三步进行:

调用 optimizer.zero_grad() 来重置模型参数的梯度。 默认情况下渐变相加;为了防止重复计算,我们在每次迭代时明确地将它们归零。

通过调用 loss.backwards() 来反向传播预测损失。 PyTorch 将损失的梯度存入 w.r.t. 每个参数。

一旦我们有了梯度,我们就调用 optimizer.step() 来通过向后传递中收集的梯度来调整参数。

Saving and Loading Model Weights 【保存 加载 模型】

Saving and Loading Models with Shapes【模型网络结构 和 参数 存储于一个 xx.pth 文件】

Exporting Model to ONNX

PyTorch 还具有本机 ONNX 导出支持。 然而,鉴于 PyTorch 执行图的动态特性,导出过程必须遍历执行图以生成持久化的 ONNX 模型。 出于这个原因,应该将适当大小的测试变量传递给导出例程(在我们的例子中,我们将创建一个正确大小的虚拟零张量):

input_image = torch.zeros((1,3,224,224)) onnx.export(model, input_image, 'model.onnx')

1

2

pytorch 机器学习 网络

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【Flutter】Dart 数据类型 字符串类型 ( 字符串定义 | 字符串拼接 | 字符串 API 调用 )
下一篇:Django入门:第八章、模板引擎设置
相关文章