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. 现代 ...
最新文章
- ios水果风暴游戏源码项目下载
- 【Canal】互联网背景下有哪些数据同步需求和解决方案?看完我知道了!!
- html session 登录页面跳转页面跳转页面,session失效后跳转到登陆页面
- 6416与aic23进行语言数据采集和处理的程序beta版
- 云计算实战系列一(走进linux)
- java tcp ack_TCP三次握手和四次挥手以及11种状态
- StringBuffer的解读(一)
- hibernate中uuid和native等主键生成策略
- LINUX下载编译zrtp
- [水晶报表]水晶报表创建以及调用方法
- 【STM32 + HAL库】倒立摆
- ubuntu 深度音乐播放器
- 如何测量运算放大器的输入电容以尽可能降低噪声
- 【渝粤教育】电大中专建筑施工技术作业 题库
- 大学四年总结——找工作是真的难
- APP启动无视频数据-YYC松鼠短视频系统
- 为什么qq不出linux版本,腾讯QQ官方Linux版本要发布了
- 性能测试包括哪些方面?分类及测试方法有哪些?
- 【对话通信原理】第3章 信息的坐骑——信号
- h3c交换机模拟器怎么用_由浅入深学习网络设备模拟器HCL 第二篇 交换机的基本配置...