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小技巧之批量抓取美女图片
Jun 06 Python
Python中的异常处理简明介绍
Apr 13 Python
如何使用Python的Requests包实现模拟登陆
Apr 27 Python
Python3日期与时间戳转换的几种方法详解
Jun 04 Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 Python
python3实现单目标粒子群算法
Nov 14 Python
Python中six模块基础用法
Dec 08 Python
Python谱减法语音降噪实例
Dec 18 Python
python读取ini配置文件过程示范
Dec 23 Python
Django 404、500页面全局配置知识点详解
Mar 10 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 Python
python热力图实现的完整实例
Jun 25 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
使用网络地址转换实现多服务器负载均衡
2006/10/09 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
PHP_Cooikes不同页面无法传递的解决方法
2014/03/07 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
php 字符串中是否包含指定字符串的多种方法
2018/04/12 PHP
php操作mongodb封装类与用法实例
2018/09/01 PHP
js获取单选按钮的数据
2006/11/27 Javascript
jQuery中操控hidden、disable等无值属性的方法
2014/01/06 Javascript
node.js中的console.warn方法使用说明
2014/12/09 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
详解Vue.js基于$.ajax获取数据并与组件的data绑定
2017/05/26 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
js实现左右两侧浮动广告
2018/07/09 Javascript
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
2019/04/16 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
ElementUI中el-tree节点的操作的实现
2020/02/27 Javascript
python提取页面内url列表的方法
2015/05/25 Python
Python 处理数据的实例详解
2017/08/10 Python
Python查找第n个子串的技巧分享
2018/06/27 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
人力资源管理专业学生自我评价
2013/11/20 职场文书
小学教师评语大全
2014/04/23 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
宝宝满月祝酒词
2015/08/10 职场文书