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生成IP段的方法
Jul 07 Python
pandas object格式转float64格式的方法
Apr 10 Python
Django实现登录随机验证码的示例代码
Jun 20 Python
python求最大连续子数组的和
Jul 07 Python
Python简单过滤字母和数字的方法小结
Jan 09 Python
django基础学习之send_mail功能
Aug 07 Python
python调用支付宝支付接口流程
Aug 15 Python
基于TensorFlow中自定义梯度的2种方式
Feb 04 Python
django列表筛选功能的实现代码
Mar 27 Python
Python OrderedDict字典排序方法详解
May 21 Python
Python使用socketServer包搭建简易服务器过程详解
Jun 12 Python
python 简单的调用有道翻译
Nov 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
php实现的CSS更新类实例
2014/09/22 PHP
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
js判断图片加载完成后获取图片实际宽高的方法
2016/02/25 Javascript
jQuery操作属性和样式详解
2016/04/13 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
javascript 判断一个对象为数组的方法
2017/05/03 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
2019/03/29 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
python itchat实现微信自动回复的示例代码
2017/08/14 Python
Python字典操作详细介绍及字典内建方法分享
2018/01/04 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
2018/02/24 Python
树莓派安装OpenCV3完整过程的实现
2019/10/10 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
彻底搞懂 python 中文乱码问题(深入分析)
2020/02/28 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
python使用多线程+socket实现端口扫描
2020/05/28 Python
Python sublime安装及配置过程详解
2020/06/29 Python
CSS3中Animation属性的使用详解
2015/08/06 HTML / CSS
梅花魂教学反思
2014/04/25 职场文书
酒店开业庆典策划方案
2014/05/28 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书
《我的伯父鲁迅先生》教学反思
2016/02/16 职场文书
干货分享:推荐信写作技巧!
2019/06/21 职场文书
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python