【NLP】深入了解PyTorch:autograd

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
NLP自然语言处理_基础版,每接口每天50万次
简介: 【NLP】深入了解PyTorch:autograd

🍀关于torch.tensor

torch.Tensor是整个package中的核心类如果将属性requires_grad设置为True,它将追踪在这个类上定义的所有操作.当代码要进行反向传播的时候,直接调用.backword()就可以自动计算所有的梯度在这个Tensor上的所有梯度将被累加进属性.grad中

如果想终止一个Tensor在计算图中的追踪回溯,只需要执行.detach()就可以将该Tensor从计算图中撤下,在未来的回溯计算中也不会再计算该Tensor

除了.detach(),如果想终止对计算图的回溯,也就是不再进行方向传播求导数的过程,也可以采用代码块的方式with torch.no_grad():,这种方式非常适用于对模型进行预测的时候,因为预测阶段不再需要对梯度进行计算


🍀关于torch.Function

Function类是和Tensor类同等重要的一个核心类,它和Tensor共同构建了一个完整的类,每一个Tensor拥有一个.grad_fn属性,代表引用了哪个具体的Function创建了该Tensor

如果某个张量Tensor是用户自定义的,则其对应的grad_fn is None.


🍀有关Tensor的操作

import torch
x = torch.ones(3,3)
print(x)
y = torch.ones(2,2,requires_grad=True)
print(y)

运行结果如下

在具有requires_grad=True的基础上对Tensor执行加法操作

z = y + 2
print(z)

运行结果如下

print(x.grad_fn)
print(y.grad_fn)

接下来分两种情况,一种是没有进行加法操作,另一种是进行了加法操作,这也就印证了

如果某个张量Tensor是用户自定义的,则其对应的grad_fn is None.

运行结果如下

接下来进行比加法操作稍微复杂的操作演示

k = z * z * 2
out = k.mean()
print(k,out)

运行结果如下

接下来介绍方法.requires_grad_()该方法可以原地改变Tensor的属性.requires_grad的值,如果没有改变默认为FALSE

a = torch.randn(2,2)
a = ((a * 3) / (a - 1))
print(a.requires_grad)
a.requires_grad_(True)
print(a.requires_grad)
b = (a * a).sum()
print(b)
print(b.grad_fn)

运行结果如下


🍀关于梯度Gradients的介绍

反向传播(Backpropagation)是深度学习中一种用于计算梯度的算法。它可以有效地计算神经网络中各个参数对于损失函数的梯度,进而用于网络参数的更新和优化。

反向传播的过程可以简单分为两个步骤:前向传播反向传播

  • 前向传播:在前向传播过程中,输入数据通过神经网络的各个层进行正向计算,得到最终的输出结果。中间每一层的计算都可以看作是一个函数,通过层与层之间的变换(如矩阵乘法、激活函数等),将输入数据逐层传递并进行计算,直至输出层得到最终的预测结果。
  • 反向传播:在反向传播过程中,通过计算链式法则,将输出结果与真实标签之间的误差反向传播回每一层网络,计算每个参数对于损失函数的梯度。这样,就可以得到每个参数的梯度信息,进而根据梯度信息进行参数的更新和优化。

反向传播的基本思路是利用链式法则来计算导数,通过不断链式求导,将误差逐层反向传播回网络的每一个参数。这样可以高效地计算出每个参数对于整个网络输出的误差的贡献程度,从而进行梯度更新和权重调整。

反向传播算法的重要性在于它使得深度神经网络的训练变得可行。通过求解参数的梯度,我们可以使用梯度下降等优化方法对神经网络进行训练,最小化损失函数,使得网络在给定输入上获得更准确的输出。

这里注意,反向传播通过.backword()来实现

关于自动求导的属性设置:可以通过设置.requires_grad=True来执行自动求导,也可以通过代码块的限制来停止自动求导

print(y.requires_grad)
print((y ** 3).requires_grad)
with torch.no_grad():
    print((x ** 3).requires_grad)

运行结果如下

可以通过.detach()进而获得一个新的张量Tensor,且拥有相同的内容但不需要自动求导

print(y.requires_grad)
z = y.detach()
print(z.requires_grad)
print(y.eq(z).all())

运行结果如下

🍀总结

本篇文章是在b站学习后完成的,若有人想了解视频可以点击Python人工智能20个小时玩转NLP自然语言处理【黑马程序员】

挑战与创造都是很痛苦的,但是很充实。


相关文章
|
7月前
|
自然语言处理 PyTorch 算法框架/工具
自然语言生成任务中的5种采样方法介绍和Pytorch代码实现
在自然语言生成任务(NLG)中,采样方法是指从生成模型中获取文本输出的一种技术。本文将介绍常用的5中方法并用Pytorch进行实现。
282 0
|
机器学习/深度学习 自然语言处理 算法
【NLP】Pytorch构建神经网络
【NLP】Pytorch构建神经网络
|
2月前
|
机器学习/深度学习 数据采集 自然语言处理
【NLP自然语言处理】基于PyTorch深度学习框架构建RNN经典案例:构建人名分类器
【NLP自然语言处理】基于PyTorch深度学习框架构建RNN经典案例:构建人名分类器
|
4月前
|
机器学习/深度学习 自然语言处理 PyTorch
PyTorch与Hugging Face Transformers:快速构建先进的NLP模型
【8月更文第27天】随着自然语言处理(NLP)技术的快速发展,深度学习模型已经成为了构建高质量NLP应用程序的关键。PyTorch 作为一种强大的深度学习框架,提供了灵活的 API 和高效的性能,非常适合于构建复杂的 NLP 模型。Hugging Face Transformers 库则是目前最流行的预训练模型库之一,它为 PyTorch 提供了大量的预训练模型和工具,极大地简化了模型训练和部署的过程。
233 2
|
4月前
|
机器学习/深度学习 自然语言处理 PyTorch
PyTorch 在自然语言处理中的应用案例研究
【8月更文第27天】PyTorch 是一个强大的开源机器学习框架,它为开发者提供了构建和训练深度学习模型的能力。在自然语言处理(NLP)领域,PyTorch 提供了一系列工具和库,使开发者能够快速地实现和测试新的想法。本文将介绍如何使用 PyTorch 来解决常见的 NLP 问题,包括文本分类和机器翻译,并提供具体的代码示例。
58 2
|
4月前
|
机器学习/深度学习 数据采集 自然语言处理
PyTorch 在自然语言处理中的应用实践
【8月更文第29天】随着深度学习技术的发展,自然语言处理(NLP)领域取得了显著的进步。PyTorch 作为一款强大的深度学习框架,因其灵活性和易用性而被广泛采用。本文将介绍如何利用 PyTorch 构建文本分类模型,并以情感分析为例进行详细介绍。
62 0
|
7月前
|
机器学习/深度学习 自然语言处理 算法
PyTorch与NLP:自然语言处理的深度学习实战
随着人工智能技术的快速发展,自然语言处理(NLP)作为其中的重要分支,日益受到人们的关注。PyTorch作为一款强大的深度学习框架,为NLP研究者提供了强大的工具。本文将介绍如何使用PyTorch进行自然语言处理的深度学习实践,包括基础概念、模型搭建、数据处理和实际应用等方面。
|
7月前
|
机器学习/深度学习 自然语言处理 PyTorch
PyTorch在NLP任务中的应用:文本分类、序列生成等
【4月更文挑战第18天】PyTorch在NLP中应用于文本分类和序列生成,支持RNN、CNN、Transformer等模型构建。其动态计算图、丰富API及强大社区使其在NLP研究中备受欢迎。预训练模型和多模态学习的发展将进一步拓宽PyTorch在NLP的应用前景。
|
PyTorch Serverless 算法框架/工具
Pytorch与autograd自动求导
Pytorch与autograd自动求导
89 0
|
人工智能 自然语言处理 PyTorch
NLP信息抽取全解析:从命名实体到事件抽取的PyTorch实战指南
NLP信息抽取全解析:从命名实体到事件抽取的PyTorch实战指南
817 0