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从入门到精通(DAY 1)
Dec 20 Python
Python元组及文件核心对象类型详解
Feb 11 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
Apr 02 Python
pandas获取groupby分组里最大值所在的行方法
Apr 20 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
Jun 07 Python
关于python下cv.waitKey无响应的原因及解决方法
Jan 10 Python
Django 路由层URLconf的实现
Dec 30 Python
Python3 实现爬取网站下所有URL方式
Jan 16 Python
Python利用PyPDF2库获取PDF文件总页码实例
Apr 03 Python
Python定时任务框架APScheduler原理及常用代码
Oct 05 Python
Python通过字典映射函数实现switch
Nov 06 Python
Python集合的基础操作
Nov 01 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程序员编程注意事项
2008/04/10 PHP
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
2016/11/15 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
laravel使用数据库测试注意事项
2020/04/10 PHP
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
Nodejs关于gzip/deflate压缩详解
2015/03/04 NodeJs
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
2018/01/02 jQuery
React中的refs的使用教程
2018/02/13 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
python之import机制详解
2014/07/03 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
python抓取文件夹的所有文件
2018/02/27 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
对python中的高效迭代器函数详解
2018/10/18 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
Python数据类型之Number数字操作实例详解
2019/05/08 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
python sqlite的Row对象操作示例
2019/09/11 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
教师实习自我鉴定
2013/12/14 职场文书
建筑工地宣传标语
2014/06/18 职场文书
超市开店计划书
2014/09/15 职场文书
基层党员干部四风问题整改方向和措施
2014/09/25 职场文书
保护地球的宣传语
2015/07/13 职场文书
《将心比心》教学反思
2016/02/23 职场文书