微积分

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

热门文章

  1. SQL存储过程实例详解
  2. GPS数据格式:NMEA-0183协议
  3. 设计模式之工厂模式类图
  4. Latex数学公式表
  5. win2008 用什么php,Win2008 Server配置PHP环境,win2008php
  6. unity3d游戏开发之UV贴图教程
  7. Android基础入门教程——10.3 AudioManager(音频管理器)
  8. ABAP 培训笔记 part 7
  9. 从零开始学WEB前端——HTML理论讲解
  10. python乱码大赛_FishC工作室《零基础学python》全套课后题.doc