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 optparse模块使用实例
Apr 09 Python
Python实现基本数据结构中队列的操作方法示例
Dec 04 Python
Python引用计数操作示例
Aug 23 Python
Python 中的lambda函数介绍
Oct 10 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
PyCharm 创建指定版本的 Django(超详图解教程)
Jun 18 Python
PyQt5组件读取参数的实例
Jun 25 Python
Django rest framework jwt的使用方法详解
Aug 08 Python
pyCharm 实现关闭代码检查
Jun 09 Python
python实例化对象的具体方法
Jun 17 Python
python中np是做什么的
Jul 21 Python
python使用建议与技巧分享(一)
Aug 17 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中数组首字符过滤功能代码
2012/07/31 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
PHP中类的自动加载的方法
2017/03/17 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
JavaScript 函数式编程的原理
2009/10/16 Javascript
javascript时区函数介绍
2012/09/14 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
2013/07/31 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
jquery easyui使用心得
2014/07/07 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
angularjs下拉框空白的解决办法
2017/06/20 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
Vue中的组件及路由使用实例代码详解
2019/05/22 Javascript
Js通过AES加密后PHP用Openssl解密的方法
2019/07/12 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
python文件操作之目录遍历实例分析
2015/05/20 Python
设计模式中的原型模式在Python程序中的应用示例
2016/03/02 Python
用Python写一个无界面的2048小游戏
2016/05/24 Python
python自定义异常实例详解
2017/07/11 Python
Python判断有效的数独算法示例
2019/02/23 Python
详解Python字典的操作
2019/03/04 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
使用CSS3的ruby-position固定注音位置的用法示例
2016/07/05 HTML / CSS
Python如何实现单例模式
2016/06/03 面试题
小学教师师德演讲稿
2014/05/06 职场文书
承诺书格式
2014/06/03 职场文书
运动会口号16字
2014/06/07 职场文书
课前一分钟演讲稿
2014/08/26 职场文书
出纳年终工作总结2014
2014/12/05 职场文书
中学生思想品德评语
2014/12/31 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书
PHP判断是否是json字符串
2021/04/01 PHP