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 相关文章推荐
编写自定义的Django模板加载器的简单示例
Jul 21 Python
简单解决Python文件中文编码问题
Nov 22 Python
Python2.7下安装Scrapy框架步骤教程
Dec 22 Python
每天迁移MySQL历史数据到历史库Python脚本
Apr 13 Python
Python实现处理逆波兰表达式示例
Jul 30 Python
python os.listdir按文件存取时间顺序列出目录的实例
Oct 21 Python
python 处理微信对账单数据的实例代码
Jul 19 Python
在PyTorch中使用标签平滑正则化的问题
Apr 03 Python
使用python实现微信小程序自动签到功能
Apr 27 Python
Python pip安装第三方库实现过程解析
Jul 09 Python
利用python进行文件操作
Dec 04 Python
python matlab库简单用法讲解
Dec 31 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使用array_fill定义多维数组的方法
2015/03/18 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
Laravel向公共模板赋值方法总结
2019/06/25 PHP
解决Laravel5.5下的toArray问题
2019/10/15 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
javascript脚本调试方法小结
2008/11/24 Javascript
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
JavaScript奇技淫巧44招【实用】
2016/12/11 Javascript
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
详解vuex的简单todolist例子
2019/07/14 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
vue实现图片上传功能
2020/05/28 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
2020/12/15 Vue.js
[08:40]Navi Vs Newbee
2018/06/07 DOTA
Pandas之DataFrame对象的列和索引之间的转化
2019/06/25 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
详解Python中pyautogui库的最全使用方法
2020/04/01 Python
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
THE OUTNET英国官网:国际设计师品牌折扣网站
2016/08/14 全球购物
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
物流管理专业推荐信
2014/09/06 职场文书
运动会广播稿200字
2014/10/18 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
亮剑观后感500字
2015/06/05 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
table不让td文字溢出操作方法
2022/12/24 HTML / CSS