动手学深度学习6 自动求导

自动求导

视频: https://www.bilibili.com/video/BV1KA411N7Px/?spm_id_from=autoNext&vd_source=eb04c9a33e87ceba9c9a2e5f09752ef8
课件: https://zh-v2.d2l.ai/chapter_preliminaries/autograd.html
课上PPT: https://courses.d2l.ai/zh-v2/assets/pdfs/part-0_7.pdf
从入门到放弃说的就是这两节课~~~

1. 自动求导

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
自动求导是怎么做出来的–计算图–等价于链式法则求导的过程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
反向传播,内存复杂度O(n),存储正向计算的所有中间结果,也是深度神经网络非常耗gpu资源的原因。
在这里插入图片描述
正向累积需要对每一层计算梯度,计算复杂度太高【每一层应该也有很多变量】

2. 自动求导实现

1. 示例 y = 2 X T X y=2X^TX y=2XTX 关于列向量x求导。

y=sum(x) , 导数是全为1的向量
在这里插入图片描述

import torchx = torch.arange(4.0)
print(x)
# 设置一个地方 保存梯度 不会在每次对一个参数求导时都分配新的内存
# 一个标量函数关于向量x的梯度是向量,并且与x具有相同的形状
# x = torch.arange(4.0, requires_grad=True)  # 定义后再调梯度或者定义向量的时候就指定requires_grad参数,效果是一样的
x.requires_grad_(True)
print(x.grad)  # 访问梯度 默认值是None
# 计算y 标量
y = 2 * torch.dot(x, x)
print(y) # torch会记住所有操作 grad_fn=<MulBackward0>
# 调用反向传播函数 计算y关于x每个分量的梯度 梯度与x同形状
y.backward()
print(x.grad) # 访问梯度
# 函数y=2x^Tx 关于x的梯度应为4x
print(x.grad == 4*x)
# 计算x的另一个函数,此时可以认为是另一层网络了,上一层的计算已经结束 梯度的值需要清零
# 在默认情况下,PyTorch会累积梯度,我们需要清除之前的值
x.grad.zero_() # 下划线表示重新写入
y = x.sum() #
y.backward()
print(x.grad) # 在梯度不清零的情况下直接求导,梯度会在原来的值上做累加求和 [0.,4.,8.,12.]+[1.,1.,1.,1.]=[1.,5.,9.,13.]
tensor([0., 1., 2., 3.])
None
tensor(28., grad_fn=<MulBackward0>)
tensor([ 0.,  4.,  8., 12.])
tensor([True, True, True, True])
tensor([ 1.,  5.,  9., 13.])

2. 非标量变量的反向传播

3. 分离计算

4. Python控制流的梯度计算

QA

明天再写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/414301.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node.js(express.js)+mysql实现登录功能

文章目录 前言实现步骤 实现步骤一、检测登录表单的数据是否合法&#xff08;3&#xff09;新建schema/user.js&#xff08;4&#xff09;在routes/use.js中引入schema/user.js中的方法reg_login_schema&#xff0c;代码如下&#xff1a; 二、根据用户名查询用户的数据三、判断…

触摸按键控制LED灯

目录 1.理论 2.代码 2.1 touch_ctrl_led.v 2.2 tb_touch_ctrl_led 1.理论 以上的波形图的touch_flag是采用组合逻辑的方式产生的。 以上的touch_flag是采用时序逻辑产生的&#xff0c;时序逻辑会延迟一拍。 以上是上升沿和下降沿的组合逻辑和时序逻辑实现&#xff0c;逻辑或…

柏曼、好视力、书客护眼台灯值得入手吗?热门台灯多方位测评对比

近年来学生近视的现象越来越严重了&#xff0c;而且近视的年龄也越来越小了&#xff0c;不少还没开始上小学的孩子&#xff0c;就已经戴上了厚厚的近视眼镜。而那些高年级的学生更是近视的重灾区&#xff0c;每天不仅需要高强度的学习和长时间用眼&#xff0c;甚至晚上都还需要…

27k+ star!有了它 再也不怕忘记linux命令了

简介 linux-command 是一个收集Linux命令的仓库&#xff0c;当前仓库搜集了 580 多个 Linux 命令&#xff0c;是一个非盈利性的仓库&#xff0c;生成了一个 web 网站方便使用&#xff0c;目前网站没有任何广告&#xff0c;内容包含 Linux 命令手册、详解、学习&#xff0c;内容…

护眼灯真能护眼吗知乎?真正能护眼的护眼台灯推荐

最近去了一些有小孩的家庭进行拜访&#xff0c;发现许多父母通常直接使用家中的灯光或者购买几十块钱的超市台灯供孩子写作业使用。然而&#xff0c;他们最后还得花费大量金钱为孩子配眼镜&#xff0c;这种做法实际上得不偿失&#xff0c;因为他们并未意识到家庭灯光对视力的影…

【Docker】Nacos的单机部署及集群部署

一、Nacos的介绍 Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 动态服务发现&#xff1a;Nacos支持DNS与RPC服务发现&#xff0c;提供原生SDK、OpenAPI等多种服务注册方式和DNS、HTTP与API等多种服务发现方式。服务健康监测&#xff1a;Nacos提供…

[渗透测试学习] Hospital - HackTheBox

文章目录 信息搜集getshell提权信息搜集 nmap扫描一下端口 发现8080端口和443端口有http服务 然后发现3389端口是启用了ms-wbt-server服务 在对443端口的扫描没有收获,并且只有邮箱登录界面无法注册 接着看向8080端口,我们随便注册用户登录后发现有文件上传功能 getshell …

RDMA Scatter Gather List详解

1. 前言 在使用RDMA操作之前&#xff0c;我们需要了解一些RDMA API中的一些需要的值。其中在ibv_send_wr我们需要一个sg_list的数组&#xff0c;sg_list是用来存放ibv_sge元素&#xff0c;那么什么是SGL以及什么是sge呢&#xff1f;对于一个使用RDMA进行开发的程序员来说&#…

Solana Mobile开启第二代Saga手机预售,怎么购买Solana Mobile?

PANews 1月17日消息&#xff0c;Solana Mobile官方宣布开启其第二代Saga手机&#xff08;Chapter 2&#xff09;的预售&#xff0c;预购押金为450美元&#xff0c;预计将于2025年上半年发货。同时&#xff0c;Chapter 2的发售将会包括推荐&#xff08;Referrals&#xff09;和积…

问题:Feem无法发送信息OR无法连接(手机端无法发给电脑端)

目录 前言 问题分析 资源、链接 其他问题 前言 需要在小米手机、华为平板、Dell电脑之间传输文件&#xff0c;试过安装破解的华为电脑管家、小米的MIUI文件传输等&#xff0c;均无果。&#xff08;小米“远程管理”ftp传输倒是可以&#xff0c;但速度太慢了&#xff0c;且…

“GPC爬虫池有用吗?

作为光算科技的独有技术&#xff0c;在深入研究谷歌爬虫推出的一种吸引谷歌爬虫的手段 要知道GPC爬虫池是否有用&#xff0c;就要知道谷歌爬虫这一概念&#xff0c;谷歌作为一个搜索引擎&#xff0c;里面有成百上千亿个网站&#xff0c;对于里面的网站内容&#xff0c;自然不可…

STM32F103标准外设库——认识STM32(一)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…