微积分

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 * xelement-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 微积分相关推荐

  1. 资源 | 斯坦福最新NLP课程上线,选择PyTorch放弃TensorFlow

    整理 | Jane 出品 | AI科技大本营 今天在斯坦福大学 2019 年冬季  CS224n 最新课程已经正式更新到官网啦.新一年,大家可以开始跟着名校课程学起来啦~今年一个非常大的变化就是所有内 ...

  2. PyTorch如何构建和实验神经网络

    点击上方"视学算法",马上关注 真爱,请设置"星标"或点个"在看" 作者 | Tirthajyoti Sarkar 来源 | Medium ...

  3. 独家 | 手把手教你用PyTorch快速准确地建立神经网络(附4个学习用例)

    作者:Shivam Bansal,2019年1月14日 翻译:陈之炎 校对:丁楠雅 本文约5600字,建议阅读30+分钟. 本文中,我们将探讨PyTorch的全部内容.我们将不止学习理论,还包括编写4 ...

  4. Pytorch学习:Task4 PyTorch激活函数原理和使用

    Pytorch学习:Task4 PyTorch激活函数原理和使用 1.torch.nn.ELU Sigmoid和ReLU结合体,具有左侧软饱和性 2.torch.nn.LeakyReLU 数学表达式: ...

  5. PyTorch基础(二)-----自动求导Autograd

    一.前言 上一篇文章中提到PyTorch提供了两个重要的高级功能,分别是: 具有强大的GPU加速的张量计算(如NumPy) 包含自动求导系统的的深度神经网络 第一个特性我们会在之后的学习中用到,这里暂 ...

  6. PyTorch官方教程中文版:PYTORCH之60MIN入门教程代码学习

    Pytorch入门 import torch""" 构建非初始化的矩阵 """x = torch.empty(5,3) #print(x)& ...

  7. 【深度学习理论】一文搞透pytorch中的tensor、autograd、反向传播和计算图

    转载:https://zhuanlan.zhihu.com/p/145353262 前言 本文的主要目标: 一遍搞懂反向传播的底层原理,以及其在深度学习框架pytorch中的实现机制.当然一遍搞不定两 ...

  8. 【李沐:动手学深度学习pytorch版】第2章:预备知识

    第2章 预备知识 2.1 数据操作 2.1.1 入门 导入的是torch而不是pytorch import torch 一个数叫标量 一个轴叫向量 两个轴叫矩阵 arange # 生成行向量 x = ...

  9. 李宏毅2021春季机器学习课程视频笔记1:Introduction, Colab PyTorch Tutorials, HW1

    诸神缄默不语-个人CSDN博文目录 李宏毅2021春季机器学习课程视频笔记集合 VX号"PolarisRisingWar"可直接搜索添加作者好友讨论. 更新日志: 2021.11. ...

  10. 动手学习深度学习——Pytorch版教程系列汇总(长期更新版)

    动手学习深度学习目录 开发环境配置 1. 基本简介 2. 预备知识 3. 线性神经网络 4. 多层感知器 5. 深度学习计算 6. 卷积神经网络 7. 现代卷积神经网络 8. 循环神经网络 9. 现代 ...

最新文章

  1. PHP流程控制语句例题,第四堂、php流程控制语句
  2. html与css结合动效案例,CSS3制作动画效果例子
  3. nyoj 55 懒省事的小明
  4. SQL Server 2005之PIVOT/UNPIVOT行列转换
  5. python前段管理3
  6. 【qduoj - 1012】反转数字(模拟,水题)
  7. linux网络编程——boa移植
  8. (75)Xilinx Slice组成结构有哪些?
  9. Django信号量实现用户密码修改
  10. 190320每日一句
  11. excel 第六次人口普查_计算机二级考试真题-Excel-第六次人口普查数据的统计分析...
  12. 【NLP】统计自然语言处理(第2版)思维导图
  13. 基于高频18000-3M3技术的RFID智能书架方案
  14. html5shiv_深入探讨:HTML5 Shiv和Polyfills
  15. 【黑苹果 Hackintosh】Delll成就5468(Vostro 5468)黑苹果
  16. 修复Win10任务栏开始菜单等系统图标无法点击问题
  17. 使用阿里邮箱发送邮件,邮件被反垃圾系统认定为垃圾邮件,导致邮件被系统退回。
  18. 企业网站建设如何选择企业cms系统
  19. Vue项目实践——实现手机扫描二维码预览页面效果
  20. python用matplotlib画折线图

热门文章

  1. ubuntu字体丑_科学网—关于ubuntu系统的一点经验——字体崩溃 - 苗玉虎的博文
  2. directx9 截屏
  3. (附源码)python 在线办公系统 毕业设计 071116
  4. dell optiplex 7090 ssf 注入intel i219 网卡驱动安装exsi 7.0.2
  5. win2008 时间同步命令
  6. MySQL 新增、修改、删除 字段 sql语句
  7. 经典怀旧软件----PP点点通
  8. python颜色代码表_[matplotlib] 颜色设置及Matplotlib颜色对照表
  9. Python 正则表达式大全
  10. 软件测试工程师简历项目经验怎么写?一千个软件测试简历范文模板