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服务器与android客户端socket通信实例
Nov 12 Python
Python实现一个简单的验证码程序
Nov 03 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
Apr 12 Python
django缓存配置的几种方法详解
Jul 16 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
Pycharm+Scrapy安装并且初始化项目的方法
Jan 15 Python
python实践项目之监控当前联网状态详情
May 23 Python
ubuntu 16.04下python版本切换的方法
Jun 14 Python
简单了解python装饰器原理及使用方法
Dec 18 Python
torch 中各种图像格式转换的实现方法
Dec 26 Python
python 实现图像快速替换某种颜色
Jun 04 Python
django上传文件的三种方式
Apr 29 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
输出控制类
2006/10/09 PHP
php ajax 静态分页过程形式
2011/09/02 PHP
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
详解php与ethereum客户端交互
2018/04/28 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
对象的类型:本地对象(1)
2006/12/29 Javascript
使用jQuery将多条数据插入模态框的实现代码
2014/10/08 Javascript
自制微信公众号一键排版工具
2016/09/22 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
VUE实现表单元素双向绑定(总结)
2017/08/08 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
2018/09/14 Javascript
node中的session的具体使用
2018/09/14 Javascript
JS实现使用POST方式发送请求
2019/08/30 Javascript
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
利用Python如何批量更新服务器文件
2018/07/29 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
python三方库之requests的快速上手
2019/03/04 Python
Python将文字转成语音并读出来的实例详解
2019/07/15 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
python3 kubernetes api的使用示例
2021/01/12 Python
Python LMDB库的使用示例
2021/02/14 Python
软件测试面试题
2015/10/21 面试题
Java如何获得ResultSet的总行数
2016/09/03 面试题
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
听课评语大全
2014/04/30 职场文书
幼儿发展评估方案
2014/06/11 职场文书
个人收入证明范本
2014/09/18 职场文书
护士个人年终总结
2015/02/13 职场文书
支教个人总结
2015/03/04 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
医院消毒隔离制度
2015/08/05 职场文书
python Tkinter的简单入门教程
2021/04/11 Python
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers