动手学深度学习笔记---4.5 数值稳定性与模型初始化

李沐大神动手学深度学习——学习笔记(不定期连载) 李沐动手学深度学习,代码技巧,相关问题,学习记录 阅读详情

一、数值稳定性

由于链式法则的存在,在神经网络中进行反向传播时,深层的神经网络会使得梯度值在反向传播时出现梯度爆炸或梯度消失的问题。

以多层感知机为例,对于隐藏层hth^tht,存在激活函数σ\sigmaσ,该层的输入为ht−1h^{t-1}ht−1满足如下:

ht=ft(ht−1)=σ(Wtht−1)h^t=f_t(h^{t-1})=\sigma(W^th^{t-1})ht=ft​(ht−1)=σ(Wtht−1)

对上述进行求导,σ\sigmaσ激活函数求导后,对所得向量对角化,变为对角矩阵:

∂ht∂ht−1=diag(σ′(Wtht−1))Wt\frac{\partial h^t}{\partial h^{t-1}}=diag(\sigma'(W^th^{t-1}))W^t∂ht−1∂ht​=diag(σ′(Wtht−1))Wt

假设hth^tht为nnn维向量,ht−1h^{t-1}ht−1为mmm维向量,则权重矩阵WtW^tWt维度必须为(n∗m)(n*m)(n∗m)
hth^tht对ht−1h^{t-1}ht−1求导,采用分子布局,所得结果应该为n∗mn*mn∗m维矩阵(雅可比矩阵)
又因为WtW^tWt为n∗mn*mn∗m维矩阵,Wt⋅ht−1W^t \cdot h^{t-1}Wt⋅ht−1为nnn维向量,为了使得结果满足n∗mn*mn∗m维矩阵
因此需要对向量Wt⋅ht−1W^t \cdot h^{t-1}Wt⋅ht−1进行对角化,转为n∗nn*nn∗n维对角矩阵,即(n∗n)∗(n∗m)=(n∗m)(n*n)*(n*m)=(n*m)(n∗n)∗(n∗m)=(n∗m)

在整个反向传播过程中,会出现梯度累乘:

∏i=td−1∂hi+1∂hi=∏i=td−1diag(σ′(Wihi−1))Wi\prod_{i=t}^{d-1}\frac{\partial h^{i+1}}{\partial h^i}=\prod_{i=t}^{d-1}diag(\sigma'(W^ih^{i-1}))W^i∏i=td−1​∂hi∂hi+1​=∏i=td−1​diag(σ′(Wihi−1))Wi

若使用ReLU做激活函数,当x>0x>0x>0时,梯度为111,否则梯度为000。此时对角矩阵内为111或000,此时∏i=td−1∂hi+1∂hi\prod_{i=t}^{d-1}\frac{\partial h^{i+1}}{\partial h^i}∏i=td−1​∂hi∂hi+1​中的部分值会来自∏i=td−1Wi\prod_{i=t}^{d-1}W^i∏i=td−1​Wi,另一些值为000,此时当网络比较深的时候,若Wi>1W^i>1Wi>1,累乘后靠近输入层的梯度值会变得非常大,出现梯度爆炸现象。

梯度爆炸的存在,会使得:

  1. 梯度值超出值域,尤其是对于16位浮点数,其值域仅为(6e-5,6e4),很容易因梯度爆炸发生越界
  2. 导致网络不稳定,最好的结果是无法从训练数据中收敛,最坏的结果是由于权重值为NaN而无法更新权重。

梯度值对学习率很敏感:

  1. 学习率太大,会带来很大的权重参数,从而在反向传播时带来更大的梯度,如此循环往复,很容易导致梯度爆炸
  2. 学习率太小,会使得模型在训练时的收敛非常缓慢,导致训练无进展
  3. 可以在训练时,动态的调整学习率。

与梯度爆炸原理相同,在反向传播过程中,若梯度值小于111,在不断的累乘过程中会使得梯度信息随层数增加不断衰减,最终出现梯度消失现象,以Sigmoid激活函数为例:

σ(x)=11+e−xσ′(x)=σ(x)(1−σ(x))\sigma(x)=\frac{1}{1+e^{-x}} \quad \sigma'(x)=\sigma(x)(1-\sigma(x))σ(x)=1+e−x1​σ′(x)=σ(x)(1−σ(x))

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sU6AH47I-1678936795186)(null#from=url&id=T12VW&originHeight=305&originWidth=560&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)]


从上图可以看出,xxx值稍大或稍小时,激活函数的梯度趋近于000,多次累乘后,出现梯度消失现象。

对于16位浮点数,很小的浮点值,例如5e−45e^{-4}5e−4,基本可以当作000来看待,很容易出现梯度消失现象。

梯度消失现象的存在,会使得:

  1. 训练无进展,不论如何设计学习率,梯度为0时,乘上学习率都为0,导致训练无进展。
  2. 对深层网络的底部层(接近输入层)处尤为严重,使得神经网络与浅层无异,无法更深。

总结: 梯度爆炸/消失通常由模型层数过深或激活函数选择不当所导致,应尽量避免梯度过大或者过小。

二、模型初始化与激活函数

训练时的梯度爆炸和梯度消失问题都会导致模型训练不稳定,解决该问题的目标是使得模型的梯度在训练时一直保持在合理范围内,为此可以采用以下几种方法:

  1. 乘法变加法:修改模型结构,采用ResNet或者LSTM等模型
  2. 归一化:对梯度进行裁剪,或者归一化处理
  3. 设置合理的权重初始化以及激活函数

本节内容主要针对第三点进行展开,理想状态下,我们希望模型每层的输出和梯度都是一个随机变量,其均值和方差保持一致,并均为常数:
image.png

在这种情况下,模型不管加多深,我们都可以认为,其每一层的输出和梯度,均值为0,方差为一个固定常数项。从而避免梯度爆炸或梯度消失现象。

权重初始化

之前所采用的均值为0,方差为0.01的正态分布N(0,0.01)N(0,0.01)N(0,0.01)对权重进行初始化的方法,针对多层感知机等小型神经网络可能没太多问题,但并不适用于深度神经网络。

我们希望在初始化时可以在合理的区间内随机初始参数,因为在训练开始时,很容易出现数值不稳定的现象,尤其是当初始化的参数远离最优解时,为了使得下降更快,梯度值会变得非常大,导致在训练更新时可能出现梯度爆炸的现象;而在最优解附近时,梯度下降缓慢,可能会在更新时梯度变成0,出现梯度消失现象。

以多层感知机为例:

假设权重wi,jtw_{i,j}^twi,jt​满足独立同分布,其期望满足E[wi,jt]=0\mathbb E [w_{i,j}^t]=0E[wi,jt​]=0,方差Var[wi,jt]=γtVar[w_{i,j}^t]=\gamma_tVar[wi,jt​]=γt​,hit−1h_i^{t-1}hit−1​与wi,jtw_{i,j}^twi,jt​独立。

当不存在激活函数时,满足ht=Wtht−1h^t=W^th^{t-1}ht=Wtht−1,其正向输出的均值与方差为:

E[hit]=E[∑jwi,jthjt−1]=∑jE[wi,jt]E[hjt−1]=0\mathbb E[h^t_i]=\mathbb E\Bigg[\sum_jw_{i,j}^th_j^{t-1}\Bigg]=\sum_j \mathbb E[w^t_{i,j}]\mathbb E[h_j^{t-1}]=0E[hit​]=E[∑j​wi,jt​hjt−1​]=∑j​E[wi,jt​]E[hjt−1​]=0

Var[hit]=E[(hit)2]−E[hit]2=E[(∑jwi,jthjt−1)2]=∑jVar[wi,jt]Var[hjt−1]=nt−1γtVar[hjt−1]Var[h^t_i]=\mathbb E[(h_i^t)^2]-\mathbb E[h_i^t]^2 = \mathbb E \Bigg[\Bigg(\sum_jw_{i,j}^th^{t-1}_j \Bigg)^2 \Bigg]=\sum_jVar[w^t_{i,j}]Var[h_j^{t-1}]=n_{t-1}\gamma_tVar[h_j^{t-1}]Var[hit​]=E[(hit​)2]−E[hit​]2=E[(∑j​wi,jt​hjt−1​)2]=∑j​Var[wi,jt​]Var[hjt−1​]=nt−1​γt​Var[hjt−1​]

当满足nt−1γt=1n_{t-1}\gamma_t=1nt−1​γt​=1时,输入与输出的方差相等。
反向传播的梯度均值与方差与正向传播类似,满足

E[∂l∂hit−1]=0Var[∂l∂hjt−1]=nyγtVar[∂l∂hjt]\mathbb E\Bigg[\frac{\partial l}{\partial h_i^{t-1}}\Bigg]=0 \qquad Var \Bigg[\frac{\partial l}{\partial h_j^{t-1}}\Bigg]=n_y\gamma_t Var\Bigg[\frac{\partial l}{\partial h_j^t}\Bigg]E[∂hit−1​∂l​]=0Var[∂hjt−1​∂l​]=ny​γt​Var[∂hjt​∂l​]

同样当满足ntγt=1n_t\gamma_t=1nt​γt​=1时,前后梯度方差相等。

综上,为了满足前向输出和反向梯度的期望与方差均满足上述假设,需要满足nt−1γt=1n_{t-1}\gamma_t=1nt−1​γt​=1和ntγt=1n_t\gamma_t=1nt​γt​=1,这两个条件很难同时满足,因为我们无法控制ntn_tnt​与nt−1n_{t-1}nt−1​。

为此我们采用Xavier初始化方法,使得γt(nt−1+nt)/2=1→γt=2/(nt−1+nt)\gamma_t(n_{t-1}+n_t)/2=1 \rightarrow \gamma_t=2/(n_{t-1}+n_t)γt​(nt−1​+nt​)/2=1→γt​=2/(nt−1​+nt​),此时可采用下述分布进行初始化:

  • 正态分布:N(0,2/(nt−1+nt))N\bigg(0,\sqrt {2/(n_{t-1}+n_t)}\bigg)N(0,2/(nt−1​+nt​)​)
  • 均匀分布:U(−6/(nt−1+nt),6/(nt−1+nt))U\bigg(-\sqrt{6/(n_{t-1}+n_t)},\sqrt{6/(n_{t-1}+n_t)}\bigg)U(−6/(nt−1​+nt​)​,6/(nt−1​+nt​)​),均匀分布U[−a,a]U[-a,a]U[−a,a]的方差为a2/3a^2/3a2/3

对于激活函数σ(x)=αx+β\sigma(x)=\alpha x+\betaσ(x)=αx+β,存在h′=Wtht−1,ht=σ(h′)h'=W^th^{t-1},h^t=\sigma(h')h′=Wtht−1,ht=σ(h′),满足输入输出不变时,存在:

E[hit]=E[αht′+β]=β→β=0\mathbb E[h^t_i]=\mathbb E[\alpha h'_t+\beta]=\beta \rightarrow \beta=0E[hit​]=E[αht′​+β]=β→β=0

Var[hit]=a2Var[hi′]→α=1Var[h_i^t]=a^2Var[h'_i] \rightarrow \alpha=1Var[hit​]=a2Var[hi′​]→α=1

反向同理,因此在采用激活函数时,若想满足期望方差不变,必须满足α=1,β=0\alpha=1,\beta=0α=1,β=0,即激活函数等于变量本身,满足σ(x)=x\sigma(x)=xσ(x)=x。

总结: 越拟合f(x)=xf(x)=xf(x)=x的激活函数效果越好,可以对Sigmoid激活函数改为4×sigmoid(x)−24 \times sigmoid(x)-24×sigmoid(x)−2,效果要比原始Sigmoid函数好很多。

ReLU激活函数的泰勒展开为relu(x)=0+xfor x≥0relu(x)=0+x \quad for \ x \geq 0relu(x)=0+xfor x≥0,因此现在常采用ReLU作为激活函数。

《动手学深度学习》PyTorch版本 本项目对中文版《动手学深度学习》中的代码进行整理,并参考一些优秀的GitHub项目给出基于PyTorch的实现方法。为了方便阅读,本项目给出全书PyTorch版的PDF版本。欢迎大家Download,Star,Fork。除了原书内容外,我们还为每一章增加了本章附录,用于对该章节中用到的函数以及数学计算加以说明,除此之外还增加了语义分割网络(U-Net)的实现。 阅读详情

相关推荐

零基础-动手学深度学习-4.8. 数值稳定性和模型初始化

数值稳定性和模型初始化

Nicholas_PFD的博客 235

动手学深度学习4.8 数值稳定性和模型初始化-笔记&练习(PyTorch)

李沐老师《动手学深度学习(PyTorch版)》4.8 数值稳定性和模型初始化-笔记&练习详解

scdifsn的博客 1549

《动手学深度学习》(PyTorch版)

《动手学深度学习》PyTorch版深度学习简介起源发展成功案例特点小结练习参考文献 深度学习简介 你可能已经接触过编程,并开发过一两款程序。同时你可能读过关于深度学习或者机器学习的铺天盖地的报道,尽管很多时候它们被赋予了更广义的名字:人工智能。 实际上,或者说幸运的是,大部分程序并不需要深度学习或者是更广义上的人工智能技术。例如,如果我们要为一台微波炉编写一个用户界面,只需要一点儿工夫我们便能设计出十几个按钮以及一系列能精确描述微波炉在各种情况下的表现的规则。 再比如,假设我们要编写一个电子邮件客户端。这样

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 7512

动手学深度学习14 数值稳定性+模型初始化和激活函数

*视频:**https://www.bilibili.com/video/BV1u64y1i75a/?**电子书:**https://zh-v2.d2l.ai/chapter_multilayer-perceptrons/numerical-stability-and-init.html**课件:**https://courses.d2l.ai/zh-v2/assets/pdfs/part-0_18.pdf这一章不好理解,数学推理较多。

weixin_42831564的博客 801

Ubuntu 22.04 局域网安装GitLab

下面直接给你一份。

u013250861的博客 666

pandas,构造MultiIndex的四种方法:from_tuples、from_arrays、from_product、from_frame

1、from_tuples:通过 “元组对” 构造MultiIndex """ 一对元组,为一个索引 """ tuples = [(1, 'red'), (1, 'blue'), (2, 'red'), (2, 'blue')] pd.MultiIndex.from_tuples(tuples, names=('number', 'color')) 2、from_arrays:通过 “列表元素的组合” 构造MultiIndex """ 列中表的元素,按位置 对应组合,形成索引 """ arrays

jieru_liu的博客 5387

【李沐】动手学深度学习 学习笔记

你好!这是【李沐】动手学深度学习v2-基于pytorch版本的学习笔记教材源代码安装教程(安装pytorch不要用pip,改成conda,pip太慢了,下载不下来)个人推荐学习学习笔记本节代码文件在源代码文件的chapter_deep-learning-computation/custom-layer.ipynb中不带参数的层下面的CenteredLayer类要从其输入中减去均值。要构建它,我们只需继承基础层类并实现前向传播功能。让我们向该层提供一些数据,验证它是否能按预期工作。带参数的层。

chenxiaowai_的博客 3万+

从冰棍到铸钢:手把手用Fluent融化凝固模型模拟3个不同场景(含案例设置对比)

本文深入探讨了Fluent融化凝固模型在冰棍融化、巧克力涂层凝固和钢铁连铸三个不同场景中的应用。通过详细的参数设置和案例对比,帮助工程师掌握相变模拟的核心技巧,提升工业级CFD分析的精度和效率。

weixin_42522953的博客 471

《动手学深度学习》4.8数值稳定性和模型初始化

4.7节的向前传播,反向传播和计算图,我不打算介绍。一个是这节内容很简单,书上也说的很清楚,理解起来也不困难。如果看不懂的话,可以去看视频,又或者看鱼书,电子版网上就能找到。这一节的内容,书上介绍的不清楚,我在这里用我自己的理解讲一遍。那么,我们开始。4.9环境与分布偏移是模型理想与现实之间的差距。这个部分不是深度学习的主要内容。它存在的目的是我们将来投入工作的时候,遇到类似的问题,可以有一个基本的概念,不至于手忙脚乱。

2301_76895374的博客 1263

vLLM 多机多卡推理测试与验证(Kubernetes)vLLM 多机多卡推理 Kubernetes 验证

本文记录在两台 L20 机器,每台机器 4 块 L20 显卡(46G)的环境下,使用 vLLM 部署 Qwen2.5-32B-Instruct-GPTQ-Int4 模型并提供多节点多卡推理服务的过程。服务(Serving)模型服务是指将模型部署到生产环境中,通过 API 或其他接口提供预测服务的过程。【分布式推理与服务】(Distributed Inference and Serving)是指在多个机器或设备之间部署和管理机器学习模型,以高效地处理推理请求并满足大规模服务需求。3、启动 vLLM 服务。

流水_鱼鱼的博客 3459

【Altium designer】如何添加过孔阵列

按下图1指示,执行【Tool】菜单栏下【Via Stitching/Shielding】选项卡中的【Add Stitching to Net...】选项 图1 “添加过孔阵列”选项 点击【Add Stitching to Net...】选项后,会跳出一个窗口,让我们设置过孔阵列的参数信息,如下图2所示。 图2 过孔阵列参数设置 过孔阵列区域:勾选该选项框,即可绘制多边形区域; 过孔内径与焊盘直径:比如内径 【Hole Size】设为12mil,焊盘直径【Diameter】设为24mil; .

夜半少年的博客 2万+

《动手学深度学习》学习笔记 第4章 多层感知机

书里为了让读者更好的理解,有大篇幅的描述性的文字,内容很多,笔记只保留主要内容,同时也是对之前知识的查漏补缺

weixin_42046845的博客 1393

1、世界级模拟电路设计指南

本文详细探讨了模拟电路设计的各个方面,从基础概念到实际应用,涵盖了元件选择、滤波器设计、反馈系统、噪声问题以及SPICE仿真的优缺点。文中还提供了设计实例和无计算机设计方法,旨在帮助工程师提升模拟电路设计的效率与可靠性。

s1t2u3的博客 97

【动手学深度学习】4.8. 数值稳定性和模型初始化

此外,当反向传播通过许多层时,除非我们在刚刚好的地方, 这些地方sigmoid函数的输入接近于零,否则整个乘积的梯度可能会消失。模型参数的初始化方案在神经网络学习中极为关键,它关乎数值稳定性、优化算法的收敛速度,还与非线性激活函数选择紧密相连,不当的初始化易导致梯度爆炸或消失。如果我们不指定初始化方法, 框架将使用默认的随机初始化方法,对于中等难度的问题,这种方法通常很有效。尽管在上述数学推理中,“不存在非线性”的假设在神经网络中很容易被违反, 但Xavier初始化方法在实践中被证明是有效的。

-- 386

勇攀数字高峰

摘要:该题目要求在数字地形图中寻找从最低点到最高点的所有严格递增登山路径。采用DFS深度优先搜索结合回溯算法,通过标记已访问位置并检查高度差限制(0<diff≤maxDiff)来遍历所有可能路径。算法首先确定起点(最低点)和终点(最高点),然后进行DFS搜索,每步移动需满足四个方向的合法移动且高度严格递增。最终输出符合条件的路径总数。提供了C++、Java和Python三种实现方案。

面试高手的博客 621

用 ADBC 把动态查询做得又快又稳:从 CL_SQL_STATEMENT 到安全取数的工程化实践

本文介绍了ABAP中ADBC(ABAP Database Connectivity)技术的核心用法与最佳实践。ADBC作为Open SQL的补充,适用于动态查询、数据库特性调用等场景。文章通过示例代码详细演示了使用ADBC执行查询的完整流程:创建SQL语句、执行查询获取结果集、批量装载数据到内表,以及分包读取处理大数据量。特别强调了动态SQL的安全防护措施,包括输入转义和参数绑定等防注入技术。同时对比了ADBC与Open SQL的适用场景,指出ADBC更适合需要动态访问数据库原生功能的场合。文章还分析了代码

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1770

【动手学深度学习PyTorch】数值稳定性和模型初始化

Xavier 初始化的目标是。

feizuiku0116的博客 1030

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【动手学深度学习v2李沐】学习笔记09:数值稳定性、模型初始化、激活函数

本文从神经网络梯度的计算开始,引入了数值稳定性注意概念,解答了为什么在网络层数较深的时候会出现数值稳定性相关的问题。并详细介绍了最常见的两个数值稳定性问题:梯度消失和梯度爆炸。接下来,本文进一步介绍了如何解决数值稳定性的问题,文中主要介绍了合理的权重初始化和合理选择激活函数两种方法。详细分析了各方法是如何使数值稳定的,并且介绍了各方法如何操作。

weixin_45800258的博客 1249

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数值稳定性、模型初始化、激活函数python

动手学深度学习14/76

weixin_46323807的博客 1215

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【动手学深度学习】--07.数值稳定性、模型初始化、激活函数

动手学深度学习

qq_46656857的博客 603

【动手学深度学习v2】深度学习,数值稳定性,梯度爆炸等问题探讨,为什么激活函数求导会出现对角矩阵?深度学习相关方差公式如何推导?——李沐老师的课程笔记

第一行,第一项保证了每一行输出的方差都是一致的,第二项是保证梯度一样γt就是第t层权重的方差因为你不能确定每一层的输出都是一样的所以第一行很难满足,因此有了第二行的折中办法,凑合要合理初始值的前提下使用激活函数必须得满足激活函数为y=xtanh和relu在原点附近差不多满足,sigmoid需要乘4减2才近似满足。

laownb的博客 2090

李沐《动手学深度学习》课程笔记:14 数值稳定性 + 模型初始化和激活函数

目录 14 数值稳定性 + 模型初始化和激活函数 1.数值稳定性 2.模型初始化和激活函数 14 数值稳定性 + 模型初始化和激活函数 1.数值稳定性 考虑一个具有L层、输入x和输出o的深层网络。 每一层l由变换fl定义, 该变换的参数为权重W(l), 其隐藏变量是h(l)(令h(0)=x)。 我们的网络可以表示为: (4.8.1)h(l)=fl(h(l−1))因此o=...

weixin_44850744的博客 1373

动手学深度学习-多层感知机-8数值稳定性和模型初始化

到目前为止,我们实现的每个模型都是根据某个预先指定的分布来初始化模型的参数。有人会认为初始化方案是理所当然的,忽略了如何做出这些选择的细节。甚至有人可能会觉得,初始化方案的选择并不是特别重要。相反,初始化方案的选择在神经网络学习中起着举足轻重的作用, 它对保持数值稳定性至关重要。此外,这些初始化方案的选择可以与非线性激活函数的选择有趣的结合在一起。我们选择哪个函数以及如何初始化参数可以决定优化算法收敛的速度有多快。糟糕选择可能会导致我们在训练时遇到梯度爆炸或梯度消失。

像污秽一样的博客 795

《动手学深度学习》笔记1.10——激活函数←模型初始化←数值稳定性

合理的权重初始值和激活函数的选取可以提升数值稳定性;ResNet的核心:层数很多的时候,使用加法而不是乘法 (来传递信号) LSTM:时序就是句子长度,例如把句子按照单词 (一个单词一个时序) 划分成一个一个的时序 (输入) 原始的时序神经网络是对每一个时序做乘法,句子太长就会梯度消失/爆炸 LSTM将乘法变成加法

科研汪小陈的主页:https://chensuzeyu.github.io 545

学习笔记-李沐动手学深度学习(五)(14-15,数值稳定性梯度爆炸和消失、调学习率、模型初始化和激活函数、Kaggle房价预测)

【目标】让梯度值在合理范围内【目标的实现方式】(本节讲方式三,一、二后面讲)(1)让乘法变加法:CNN中用的多的是 ResNetRNN中用的多的是LSTM(带时序的)(2)归一化(不管原梯度多大,都将其拉到 均值为0方差为1的范围内)或 设定阈值(如梯度大于5,则置为5,小于-5,则置为-5)(3)合理的权重初始化和激活函数(即 合理选择w和sigma)

ljmiiianng的博客 1737

《动手学深度学习》Pytorch版开源!

机器之心报道项目作者:ShusenTang参与:思想要入门最前沿的深度学习,想要玩最常见的深度学习框架?那就用 PyTorch 版的《动手学深度学习》吧,零基础也能入门 DL。李沐等人的...

算法channel 2114
上一篇: 动手学深度学习笔记---4.4 前向传播、反向传播与计算图
下一篇: 动手学深度学习笔记---4.6 环境与分布偏移
Aaaaaki
博客等级 码龄9年 884粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aaaaaki

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值