微积分

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. 每日一皮:原型还可以啊,怎么上线后就这样了。。。
  2. 在非主线程中创建窗口
  3. bzoj 4573: [Zjoi2016]大森林
  4. python 学习资源推荐
  5. python 语句简写_自学Python-语句之列表推导式
  6. 前端开发必须说的那些事之——同源策略(same origin policy)
  7. MySQL 导入 csv、excel 或者 sql 文件
  8. HyperLedger的共识( Consensus)
  9. js闭包,这个算是比较通俗的了(转)
  10. ×××全功能邮件系统(6)
  11. 基于51单片机交通灯程序设计与仿真
  12. 19条优秀的编码原则
  13. Delphi另一个多线程函数:BeginThread用法
  14. Upgraded Edition
  15. 深度linux显示方块,在Deepin下用Wine运行文华财经赢顺的经验,附字体显示方框的解决...
  16. Linux网络管理18:DHCP服务器
  17. 编程常用英语单词(一)
  18. html tr隐藏 边框存在,CSS 设置tr的边框
  19. 教您使用FPGA来画铅笔画
  20. 都在这儿!最全的北斗厂家企业名单!

热门文章

  1. win8的cmd运行命令大全
  2. 天天模拟器显示获取服务器失败,天天模拟器FAQ、天天模拟器常见问题快速帮助...
  3. activex 控件 过期_ie8/9下Activex控件无法加载的两种解决方法
  4. 税务计算机类考试题型,2020年税务师考试题型、计算器使用规定及考试难度
  5. vb.net怎么和mysql连接_解析VB.NET如何连接数据库
  6. 编译原理第四章--自上而下的语法分析
  7. 通过 HttpClient 下载 文件
  8. 做一个高德地图的 iOS / Android .NET MAUI 控件系列 - 前言
  9. android日记论文摘要,毕业设计(论文)-基于android的日记本的设计与开发.doc
  10. python手写lfw数据集转pair.txt形式