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标准库之collections包的使用教程
Apr 27 Python
python 接口_从协议到抽象基类详解
Aug 24 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
Mar 15 Python
Python中.join()和os.path.join()两个函数的用法详解
Jun 11 Python
详解python pandas 分组统计的方法
Jul 30 Python
基于Python的图像数据增强Data Augmentation解析
Aug 13 Python
Python面向对象编程基础实例分析
Jan 17 Python
python中取绝对值简单方法总结
Jul 24 Python
详解python方法之绑定方法与非绑定方法
Aug 17 Python
如何利用python检测图片是否包含二维码
Oct 15 Python
Python实现双向链表
May 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
DC游戏Steam周三特惠 《蝙蝠侠》阿卡姆系列平史低
2020/04/09 欧美动漫
ThinkPHP采用模块和操作分析
2011/04/18 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
图片连续滚动代码[兼容IE/firefox]
2009/06/11 Javascript
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
IE6浏览器中window.location.href无效的解决方法
2014/11/20 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
webpack构建换肤功能的思路详解
2017/11/27 Javascript
微信小程序slider组件使用详解
2018/01/31 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
TensorFlow变量管理详解
2018/03/10 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
2018/08/03 Python
在pycharm上mongodb配置及可视化设置方法
2018/11/30 Python
python pytest进阶之fixture详解
2019/06/27 Python
使用Python的turtle模块画国旗
2019/09/24 Python
Django框架安装方法图文详解
2019/11/04 Python
Python识别html主要文本框过程解析
2020/02/18 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
Python多分支if语句的使用
2020/09/03 Python
英国领先的珍珠首饰品牌:Orchira
2016/09/11 全球购物
电视节目策划方案
2014/05/16 职场文书
竞选班长演讲稿500字
2014/08/22 职场文书
消防志愿者活动方案
2014/08/23 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
社区六一儿童节活动总结
2015/02/11 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书