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中正则表达式的使用详解
Oct 17 Python
通过实例浅析Python对比C语言的编程思想差异
Aug 30 Python
JPype实现在python中调用JAVA的实例
Jul 19 Python
Python中的二维数组实例(list与numpy.array)
Apr 13 Python
Python编程图形库之Pillow使用方法讲解
Dec 28 Python
Django对数据库进行添加与更新的例子
Jul 12 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
Aug 05 Python
python设置随机种子实例讲解
Sep 12 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 Python
谈谈python垃圾回收机制
Sep 27 Python
Python基于template实现字符串替换
Nov 27 Python
利用python查看数组中的所有元素是否相同
Jan 08 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
非常不错的MySQL优化的8条经验
2008/03/24 PHP
php下过滤html代码的函数 提高程序安全性
2010/03/02 PHP
php函数之子字符串替换&amp;#65279; str_replace
2011/03/23 PHP
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
2014/06/12 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
PHP制作万年历
2015/01/07 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
2015/07/28 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
Smarty模板变量与调节器实例详解
2019/07/20 PHP
Thinkphp 3.2框架使用Redis的方法详解
2019/10/24 PHP
用javascript实现点击链接弹出&quot;图片另存为&quot;而不是直接打开
2007/08/15 Javascript
禁止JQuery中的load方法装载IE缓存中文件的方法
2009/09/11 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
jQuery 遍历函数详解
2015/07/05 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
2018/09/30 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
Python yield 小结和实例
2014/04/25 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
Python装饰器用法实例总结
2018/02/07 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
2019/02/19 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
Python多线程通信queue队列用法实例分析
2020/03/24 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用
2020/08/24 HTML / CSS
使用数据结构给女朋友写个Html5走迷宫游戏
2019/11/26 HTML / CSS
求职意向书
2014/07/29 职场文书
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python