PyTorch 导数应用的使用教程


Posted in Python onAugust 31, 2020

前言

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

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的导数,基本公式在下方

PyTorch 导数应用的使用教程

注意点

我们使用.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 导数应用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
简单介绍Python中用于求最小值的min()方法
May 15 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
Feb 21 Python
python按行读取文件,去掉每行的换行符\n的实例
Apr 19 Python
Python 通过调用接口获取公交信息的实例
Dec 17 Python
Python3 安装PyQt5及exe打包图文教程
Jan 08 Python
Django REST framework 如何实现内置访问频率控制
Jul 23 Python
selenium+python配置chrome浏览器的选项的实现
Mar 18 Python
Python decimal模块使用方法详解
Jun 08 Python
Python如何定义接口和抽象类
Jul 28 Python
python如何快速拼接字符串
Oct 28 Python
python实现简单石头剪刀布游戏
Oct 24 Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 Python
PyTorch安装与基本使用详解
Aug 31 #Python
pycharm 添加解释器的方法步骤
Aug 31 #Python
解决Windows下python和pip命令无法使用的问题
Aug 31 #Python
Python函数__new__及__init__作用及区别解析
Aug 31 #Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
Aug 31 #Python
python自动提取文本中的时间(包含中文日期)
Aug 31 #Python
Python Selenium自动化获取页面信息的方法
Aug 31 #Python
You might like
php str_pad() 将字符串填充成指定长度的字符串
2010/02/23 PHP
ueditor 1.2.6 使用方法说明
2013/07/24 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
JS小功能(列表页面隔行变色)简单实现
2013/11/28 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
jquery text()方法取标签中的文本
2014/07/25 Javascript
利用vue写todolist单页应用
2016/12/15 Javascript
Bootstrap CSS布局之图像
2016/12/17 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
JavaScript图片处理与合成总结
2018/03/04 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
24行JavaScript代码实现Redux的方法实例
2019/11/17 Javascript
bootstrap-paginator服务器端分页使用方法详解
2020/02/13 Javascript
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
JS中的继承操作实例总结
2020/06/06 Javascript
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
Python使用lxml模块和Requests模块抓取HTML页面的教程
2016/05/16 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
2016/06/30 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
详解Python并发编程之从性能角度来初探并发编程
2019/08/23 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
Python类及获取对象属性方法解析
2020/06/15 Python
python subprocess pipe 实时输出日志的操作
2020/12/05 Python
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
6PM官网:折扣鞋、服装及配饰
2018/08/03 全球购物
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
办公室经理岗位职责
2014/01/01 职场文书
我为党旗添光彩演讲稿
2014/09/13 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
提档介绍信范文
2015/10/22 职场文书
golang fmt格式“占位符”的实例用法详解
2021/07/04 Golang