Pytorch 微积分
微积分
0. 环境介绍
环境使用 Kaggle 里免费建立的 Notebook
教程使用李沐老师的 动手学深度学习 网站和 视频讲解
小技巧:当遇到函数看不懂的时候可以按 Shift+Tab
查看函数详解。
0.1 求导结果
0.2 y 为标量,X 为向量
0.3 y 和 X 均为向量
1. 自动求导
假设我们想对函数 y=2x⊤xy=2x^{\top}xy=2x⊤x 关于列向量 xxx 求导。
小细节:arange(4)
代表生成 4 个连续整型数,arange(4.0)
代表生成 4 个连续浮点数。
1.1 存储梯度
第一行代码设置与 x = torch.arange(4.0, requires_grad=True)
等价。
x.grad
默认为 None
。
1.2 计算 yyy
隐式构造计算图。
1.3 调用反向传播函数来自动计算 yyy 关于每个分量的梯度
内积是自己相乘,也就是 2x22x^22x2,求导后就是 4x4x4x。
1.4 计算 y=sum(x)y=sum(x)y=sum(x) 关于 xxx 的梯度
默认情况下,Pytorch 会累计梯度,我们需要清除之前的值。
如果注释掉 x.grad.zero_()
会导致每次 y.backward()
后 x.grad
的结果都是与之前的保留的梯度相加之和。
1.5 计算 y=sum(x∗x)y=sum(x*x)y=sum(x∗x) 关于 xxx 的梯度
这里的 x * x
为 element-wise
的结果。
y.sum().backward()
等价于 y.backward(torch.ones(len(x)))
1.6 将某些计算移动到记录的计算图之外
y.detach()
将 yyy 设置为一个常数,命名为 uuu,zzz 关于 xxx 的导数就是 uuu。这个操作可以用于固定参数。
1.7 即使构建函数的计算图需要通过 Python 控制流(例如,条件、循环或任意函数调用),我们仍然可以计算得到的变量的梯度。
调用 f(a)f(a)f(a) 函数返回的值,是一个关于 aaa 的线性函数,所以 ddd 关于 aaa 的导数就是这个线性函数中 aaa 的系数
2. 练习
2.1 在运行反向传播函数之后,立即再次运行它,看看会发生什么。
会报错
RuntimeError: Trying to backward through the graph a second time (or directly access saved variables after they have already been freed). Saved intermediate values of the graph are freed when you call .backward() or autograd.grad(). Specify retain_graph=True if you need to backward through the graph a second time or if you need to access saved variables after calling backward.
Pytorch构建的计算图是动态图,为了节约内存,所以每次一轮迭代完也即是进行了一次 backward
函数计算之后计算图就被在内存释放,因此如果你需要多次 backward
只需要在第一次反向传播时候添加一个 retain_graph=True
标识,让计算图不被立即释放。
2.2 在控制流的例子中,我们计算 ddd 关于 aaa 的导数,如果我们将变量 aaa 更改为随机向量或矩阵,会发生什么?
会报错
RuntimeError: grad can be implicitly created only for scalar outputs
因为默认是个标量,所以需要设置参数 torch.ones_like(d)
。
2.3 使 f(x)=sin(x)f(x)=\sin(x)f(x)=sin(x),绘制 f(x)f(x)f(x) 和 df(x)dx\frac{df(x)}{dx}dxdf(x) 的图像,其中后者不使用 f′(x)=cos(x)f'(x)=\cos(x)f′(x)=cos(x) 。
Pytorch 微积分相关推荐
- 资源 | 斯坦福最新NLP课程上线,选择PyTorch放弃TensorFlow
整理 | Jane 出品 | AI科技大本营 今天在斯坦福大学 2019 年冬季 CS224n 最新课程已经正式更新到官网啦.新一年,大家可以开始跟着名校课程学起来啦~今年一个非常大的变化就是所有内 ...
- PyTorch如何构建和实验神经网络
点击上方"视学算法",马上关注 真爱,请设置"星标"或点个"在看" 作者 | Tirthajyoti Sarkar 来源 | Medium ...
- 独家 | 手把手教你用PyTorch快速准确地建立神经网络(附4个学习用例)
作者:Shivam Bansal,2019年1月14日 翻译:陈之炎 校对:丁楠雅 本文约5600字,建议阅读30+分钟. 本文中,我们将探讨PyTorch的全部内容.我们将不止学习理论,还包括编写4 ...
- Pytorch学习:Task4 PyTorch激活函数原理和使用
Pytorch学习:Task4 PyTorch激活函数原理和使用 1.torch.nn.ELU Sigmoid和ReLU结合体,具有左侧软饱和性 2.torch.nn.LeakyReLU 数学表达式: ...
- PyTorch基础(二)-----自动求导Autograd
一.前言 上一篇文章中提到PyTorch提供了两个重要的高级功能,分别是: 具有强大的GPU加速的张量计算(如NumPy) 包含自动求导系统的的深度神经网络 第一个特性我们会在之后的学习中用到,这里暂 ...
- PyTorch官方教程中文版:PYTORCH之60MIN入门教程代码学习
Pytorch入门 import torch""" 构建非初始化的矩阵 """x = torch.empty(5,3) #print(x)& ...
- 【深度学习理论】一文搞透pytorch中的tensor、autograd、反向传播和计算图
转载:https://zhuanlan.zhihu.com/p/145353262 前言 本文的主要目标: 一遍搞懂反向传播的底层原理,以及其在深度学习框架pytorch中的实现机制.当然一遍搞不定两 ...
- 【李沐:动手学深度学习pytorch版】第2章:预备知识
第2章 预备知识 2.1 数据操作 2.1.1 入门 导入的是torch而不是pytorch import torch 一个数叫标量 一个轴叫向量 两个轴叫矩阵 arange # 生成行向量 x = ...
- 李宏毅2021春季机器学习课程视频笔记1:Introduction, Colab PyTorch Tutorials, HW1
诸神缄默不语-个人CSDN博文目录 李宏毅2021春季机器学习课程视频笔记集合 VX号"PolarisRisingWar"可直接搜索添加作者好友讨论. 更新日志: 2021.11. ...
- 动手学习深度学习——Pytorch版教程系列汇总(长期更新版)
动手学习深度学习目录 开发环境配置 1. 基本简介 2. 预备知识 3. 线性神经网络 4. 多层感知器 5. 深度学习计算 6. 卷积神经网络 7. 现代卷积神经网络 8. 循环神经网络 9. 现代 ...
最新文章
- PHP流程控制语句例题,第四堂、php流程控制语句
- html与css结合动效案例,CSS3制作动画效果例子
- nyoj 55 懒省事的小明
- SQL Server 2005之PIVOT/UNPIVOT行列转换
- python前段管理3
- 【qduoj - 1012】反转数字(模拟,水题)
- linux网络编程——boa移植
- (75)Xilinx Slice组成结构有哪些?
- Django信号量实现用户密码修改
- 190320每日一句
- excel 第六次人口普查_计算机二级考试真题-Excel-第六次人口普查数据的统计分析...
- 【NLP】统计自然语言处理(第2版)思维导图
- 基于高频18000-3M3技术的RFID智能书架方案
- html5shiv_深入探讨:HTML5 Shiv和Polyfills
- 【黑苹果 Hackintosh】Delll成就5468(Vostro 5468)黑苹果
- 修复Win10任务栏开始菜单等系统图标无法点击问题
- 使用阿里邮箱发送邮件,邮件被反垃圾系统认定为垃圾邮件,导致邮件被系统退回。
- 企业网站建设如何选择企业cms系统
- Vue项目实践——实现手机扫描二维码预览页面效果
- python用matplotlib画折线图
热门文章
- ubuntu字体丑_科学网—关于ubuntu系统的一点经验——字体崩溃 - 苗玉虎的博文
- directx9 截屏
- (附源码)python 在线办公系统 毕业设计 071116
- dell optiplex 7090 ssf 注入intel i219 网卡驱动安装exsi 7.0.2
- win2008 时间同步命令
- MySQL 新增、修改、删除 字段 sql语句
- 经典怀旧软件----PP点点通
- python颜色代码表_[matplotlib] 颜色设置及Matplotlib颜色对照表
- Python 正则表达式大全
- 软件测试工程师简历项目经验怎么写?一千个软件测试简历范文模板