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 相关文章推荐
Android应用开发中Action bar编写的入门教程
Feb 26 Python
详解python如何调用C/C++底层库与互相传值
Aug 10 Python
python日志记录模块实例及改进
Feb 12 Python
python实现12306火车票查询器
Apr 20 Python
python实现xlsx文件分析详解
Jan 02 Python
python xlsxwriter创建excel图表的方法
Jun 11 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
Jul 27 Python
Python3.6.2调用ffmpeg的方法
Jan 10 Python
python执行精确的小数计算方法
Jan 21 Python
python设置表格边框的具体方法
Jul 17 Python
python实现ping命令小程序
Dec 28 Python
用Python的绘图库(matplotlib)绘制小波能量谱
Apr 17 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环境搭建最新方法
2006/09/05 PHP
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
PHP清除字符串中所有无用标签的方法
2014/12/01 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
2019/03/14 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
js 页面传参数时 参数值含特殊字符的问题
2009/12/13 Javascript
javascript 浏览器检测代码精简版
2010/03/04 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
一些常用的JavaScript函数(json)附详细说明
2011/05/25 Javascript
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
jQuery中replaceAll()方法用法实例
2015/01/16 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
vue中实现滚动加载更多的示例
2017/11/08 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
Vue动态面包屑功能的实现方法
2019/07/01 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
python实现狄克斯特拉算法
2019/01/17 Python
Python生成器常见问题及解决方案
2020/03/21 Python
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
生态养殖创业计划书
2014/05/06 职场文书
2014年预算员工作总结
2014/12/05 职场文书
个人先进事迹材料
2014/12/29 职场文书
作息时间调整通知
2015/04/22 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
Python自动化实战之接口请求的实现
2022/05/30 Python