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分割和拼接字符串
Nov 01 Python
在Python中使用mechanize模块模拟浏览器功能
May 05 Python
python3抓取中文网页的方法
Jul 28 Python
如何使用python爬取csdn博客访问量
Feb 14 Python
教你用Type Hint提高Python程序开发效率
Aug 08 Python
python使用matplotlib绘图时图例显示问题的解决
Apr 27 Python
利用python实现简单的邮件发送客户端示例
Dec 23 Python
python3操作微信itchat实现发送图片
Feb 24 Python
Python 使用Numpy对矩阵进行转置的方法
Jan 28 Python
如何在Python中实现goto语句的方法
May 18 Python
Python面向对象之多态原理与用法案例分析
Dec 30 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
Sep 24 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 5.3新增魔术方法__invoke概述
2014/07/23 PHP
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
jquery插件推荐浏览器嗅探userAgent
2014/11/09 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
hovertree插件实现二级树形菜单(简单实用)
2016/12/28 Javascript
Bootstrap 网格系统布局详解
2017/03/19 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
Vue 进阶教程之v-model详解
2017/05/06 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
2017/05/25 jQuery
集成vue到jquery/bootstrap项目的方法
2018/02/10 jQuery
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
解决vue项目,npm run build后,报路径错的问题
2020/08/13 Javascript
[01:46]新英雄登场
2019/09/10 DOTA
python删除过期文件的方法
2015/05/29 Python
Python实现数据库并行读取和写入实例
2017/06/09 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
Python简单定义与使用字典dict的方法示例
2017/07/25 Python
python获取代码运行时间的实例代码
2018/06/11 Python
python实现二级登陆菜单及安装过程
2019/06/21 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
html5 button autofocus 属性介绍及应用
2013/01/04 HTML / CSS
2013英文求职信模板范文
2013/11/15 职场文书
业务助理岗位职责
2013/11/18 职场文书
大学生职业生涯规划书前言
2014/01/09 职场文书
yy生日主持词
2014/03/20 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
民政工作个人总结
2015/02/28 职场文书
个人年终总结结尾
2015/03/06 职场文书
如何写好活动总结
2019/06/21 职场文书