当前位置: 首页 > 编程笔记 >

PyTorch 导数应用的使用教程

赖诚
2023-03-14
本文向大家介绍PyTorch 导数应用的使用教程,包括了PyTorch 导数应用的使用教程的使用技巧和注意事项,需要的朋友参考一下

前言

由于机器学习的基本思想就是找到一个函数去拟合样本数据分布,因此就涉及到了梯度去求最小值,在超平面我们又很难直接得到全局最优值,更没有通用性,因此我们就想办法让梯度沿着负方向下降,那么我们就能得到一个局部或全局的最优值了,因此导数就在机器学习中显得非常重要了

基本使用

tensor.backward()可以及自动将梯度累加积到tensor.grad上

x = torch.ones(3,3)
print(x.requires_grad)
x.requires_grad_(True)
print(x.requires_grad)
y = x**2/(x-2)
out = y.mean()
print(x.grad)
out.backward()
print(x.grad)

False
True
None
tensor([[-0.3333, -0.3333, -0.3333],
        [-0.3333, -0.3333, -0.3333],
        [-0.3333, -0.3333, -0.3333]])

requires_grad 可以获取到tensor是否可导
requires_grad_() 可以设置tensor是否可导
grad 查看当前tensor导数

上面的公式很简单,程序含义

1/4 * (x**2) / (x-2)

求x的导数,基本公式在下方

注意点

我们使用.mean后得到的是标量,如果不是标量会报错

x = torch.ones(3, requires_grad=True)
y = x * 2
y = y * 2
print(y)
tensor([4., 4., 4.], grad_fn=<MulBackward0>)
y.backward()
print(x.grad)

报错

RuntimeError: grad can be implicitly created only for scalar outputs

v = torch.tensor([0.1, 1.0, 0.0001], dtype=torch.float)
y.backward()
print(x.grad)
tensor([4.0000e-01, 4.0000e+00, 4.0000e-04])

no_grad()作用域

如果想要某部分程序不可导那么我们可以使用这个

x = torch.ones(3, requires_grad=True)
y = x * 2
print(y.requires_grad)
with torch.no_grad():
 y = y * 2 
 print(y.requires_grad)

True
False

总结

这一章我们使用pytorch里面的backward,自动实现了函数的求导,帮助我们在后面面对很多超大参数量的函数的时候,求导就变得游刃有余

上节

PyTorch使用教程-安装与基本使用

到此这篇关于PyTorch 导数应用的使用教程的文章就介绍到这了,更多相关PyTorch 导数应用内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 主要内容:面向读者,前提条件,问题反馈PyTorch是一个用于Python的开源机器学习库,完全基于Torch。 它主要用于自然语言处理等应用程序。 PyTorch由Facebook的人工智能研究小组和Uber的“Pyro”软件开发,用于内置概率编程的概念。 面向读者 本教程是为python开发人员准备的,专注于使用机器学习算法和自然语言处理系统进行研究和开发。 本教程的目的是完整地描述PyTorch的所有概念和真实世界示例。 前提条

  • 译者:firdameng 作者:Soumith Chintala 在这个简短的教程中,我们将讨论PyTorch的分布式软件包。 我们将看到如何设置分布式设置,使用不同的通信策略,并查看包的内部部分。 开始 PyTorch中包含的分布式软件包(即torch.distributed)使研究人员和从业人员能够轻松地跨进程和计算机集群并行化他们的计算。 为此,它利用消息传递语义,允许每个进程将数据传递给任

  • 本文向大家介绍使用Kotlin开发Android应用教程,包括了使用Kotlin开发Android应用教程的使用技巧和注意事项,需要的朋友参考一下 使用Kotlin开发Android应用 1、Kotlin介绍  [Kotlin](https://kotlinlang.org/) Kotlin是一门基于JVM的编程语言,它正成长为Android开发中用于替代Java语言的继承者。Java是世界上使用

  • 我想知道使用连接到MongoDB的DataLoader是否是一件明智的事情,以及如何实现这一点。 出身背景 我在一个(本地)MongoDB中有大约2000万个文档。超过内存容量的文档太多了。我想在数据上训练一个深层次的神经网络。到目前为止,我一直在首先将数据导出到文件系统,子文件夹被命名为文档的类。但我觉得这种方法是荒谬的。如果数据库中的数据已经得到很好的维护,为什么要先导出(然后删除)。 问题1

  • 本文向大家介绍jupyter notebook 调用环境中的Keras或者pytorch教程,包括了jupyter notebook 调用环境中的Keras或者pytorch教程的使用技巧和注意事项,需要的朋友参考一下 1.安装插件,在非虚拟环境 conda install nb_conda conda install ipykernel 2、安装ipykernel包,在虚拟环境下安装 在Wind

  • 译者:solerji PyTorch C++ 前端 是PyTorch机器学习框架的一个纯C 接口。PyTorch的主接口是Python,Python API位于一个基础的C代码库之上,提供了基本的数据结构和功能,例如张量和自动求导。C 前端暴露了一个纯的C11的API,在C++底层代码库之上扩展了机器学习训练和推理所需的工具扩展。这包括用于神经网络建模的内置组件集合;扩展此集合的自定义模块API;