深度学习
深度学习
AI_Younger_Man
这个作者很懒,什么都没留下…
展开
-
移动平均滤波器(moving average filter)
移动平均滤波器(moving average filter) ...原创 2020-09-09 11:42:40 · 2181 阅读 · 0 评论 -
深度强化学习4:Q-learning更高阶的算法
【李宏毅深度强化学习笔记】4、Q-learning更高阶的算法 ...原创 2020-08-14 10:21:20 · 587 阅读 · 0 评论 -
动手学深度学习:10.1 词嵌入(word2vec)
10.1 词嵌入(word2vec)注:个人觉得本节和下一节写得过于简洁,对于初学者来说可能比较难懂。所以强烈推荐读一读博客Word2Vec-知其然知其所以然。自然语言是一套用来表达含义的复杂系统。在这套系统中,词是表义的基本单元。顾名思义,词向量是用来表示词的向量,也可被认为是词的特征向量或表征。把词映射为实数域向量的技术也叫词嵌入(word embedding)。近年来,词嵌入已逐渐成为自然语言处理的基础知识。https://tangshusen.me/Dive-into-DL-PyTorch/#/原创 2020-08-11 15:30:06 · 223 阅读 · 0 评论 -
动手学深度学习:8.4 多GPU计算
8.4 多GPU计算注:相对于本章的前面几节,我们实际中更可能遇到本节所讨论的情况:多GPU计算。原书将MXNet的多GPU计算分成了8.4和8.5两节,但我们将关于PyTorch的多GPU计算统一放在本节讨论。需要注意的是,这里我们谈论的是单主机多GPU计算而不是分布式计算。如果对分布式计算感兴趣可以参考PyTorch官方文档。本节中我们将展示如何使用多块GPU计算,例如,使用多块GPU训练同一个模型。正如所期望的那样,运行本节中的程序需要至少2块GPU。事实上,一台机器上安装多块GPU很常见,这是原创 2020-08-11 11:26:09 · 430 阅读 · 0 评论 -
动手学深度学习:8.3 自动并行计算
8.3 自动并行计算上一节提到,默认情况下,GPU 操作是异步的。当调用一个使用 GPU 的函数时,这些操作会在特定的设备上排队,但不一定会在稍后执行。这允许我们并行更多的计算,包括 CPU 或其他 GPU 上的操作。下面看一个简单的例子。首先导入本节中实验所需的包或模块。注意,需要至少2块GPU才能运行本节实验。import torchimport timeassert torch.cuda.device_count() >= 2Copy to clipboardErrorCopied我们先实原创 2020-08-11 11:25:15 · 271 阅读 · 0 评论 -
动手学深度学习:8.2 异步计算
8.2 异步计算此节内容对应PyTorch的版本本人没怎么用过,网上参考资料也比较少,所以略:),有兴趣的可以去看看原文。关于PyTorch的异步执行我只在官方文档找到了一段:By default, GPU operations are asynchronous. When you call a function that uses the GPU, the operations are enqueued to the particular device, but not necessarily exec原创 2020-08-11 11:24:22 · 351 阅读 · 0 评论 -
动手学深度学习:8.1 命令式和符号式混合编程
8.1 命令式和符号式混合编程本书到目前为止一直都在使用命令式编程,它使用编程语句改变程序状态。考虑下面这段简单的命令式程序。def add(a, b): return a + bdef fancy_func(a, b, c, d):e = add(a, b)f = add(c, d)g = add(e, f)return gfancy_func(1, 2, 3, 4) # 10Copy to clipboardErrorCopied和我们预期的一样,在运行语句e = add(a, b)原创 2020-08-11 11:15:47 · 239 阅读 · 0 评论 -
动手学深度学习:7.8 Adam算法
7.8 Adam算法Adam算法在RMSProp算法基础上对小批量随机梯度也做了指数加权移动平均 [1]。下面我们来介绍这个算法。所以Adam算法可以看做是RMSProp算法与动量法的结合。7.8.1 算法Adam算法使用了动量变量vtvt \boldsymbol{v}_tt通过hyperparams参数传入adam函数。%matplotlib inlineimport torchimport syssys.path.append("..") import d2lzh_pytorch原创 2020-08-11 11:12:44 · 511 阅读 · 0 评论 -
动手学深度学习:7.7 AdaDelta算法
7.7 AdaDelta算法除了RMSProp算法以外,另一个常用优化算法AdaDelta算法也针对AdaGrad算法在迭代后期可能较难找到有用解的问题做了改进 [1]。有意思的是,AdaDelta算法没有学习率这一超参数。7.7.1 算法AdaDelta算法也像RMSProp算法一样,使用了小批量随机梯度gtgt \boldsymbol{g}_tΔxt。我们按AdaDelta算法中的公式实现该算法。%matplotlib inlineimport torchimport syssys.p原创 2020-08-11 11:10:56 · 399 阅读 · 0 评论 -
动手学深度学习:7.6 RMSProp算法
7.6 RMSProp算法我们在7.5节(AdaGrad算法)中提到,因为调整学习率时分母上的变量stst \boldsymbol{s}_tf(x)=0.1x12+2x22中自变量的迭代轨迹。回忆在7.5节(AdaGrad算法)使用的学习率为0.4的AdaGrad算法,自变量在迭代后期的移动幅度较小。但在同样的学习率下,RMSProp算法可以更快逼近最优解。%matplotlib inlineimport mathimport torchimport syssys.path.appen原创 2020-08-10 16:47:56 · 724 阅读 · 0 评论 -
动手学深度学习:7.5 AdaGrad算法
7.5 AdaGrad算法在之前介绍过的优化算法中,目标函数自变量的每一个元素在相同时间步都使用同一个学习率来自我迭代。举个例子,假设目标函数为ff fst的累加效果使学习率不断衰减,自变量在迭代后期的移动幅度较小。%matplotlib inlineimport mathimport torchimport syssys.path.append("..") import d2lzh_pytorch as d2ldef adagrad_2d(x1, x2, s1, s2):g1,原创 2020-08-10 15:20:38 · 335 阅读 · 0 评论 -
动手学深度学习:7.4 动量法
7.4 动量法在7.2节(梯度下降和随机梯度下降)中我们提到,目标函数有关自变量的梯度代表了目标函数在自变量当前位置下降最快的方向。因此,梯度下降也叫作最陡下降(steepest descent)。在每次迭代中,梯度下降根据自变量当前位置,沿着当前位置的梯度更新自变量。然而,如果自变量的迭代方向仅仅取决于自变量当前位置,这可能会带来一些问题。https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter07_optimization/7.4_momentum7.4.原创 2020-08-10 12:25:18 · 458 阅读 · 0 评论 -
动手学深度学习:7.2 梯度下降和随机梯度下降
7.2 梯度下降和随机梯度下降在本节中,我们将介绍梯度下降(gradient descent)的工作原理。虽然梯度下降在深度学习中很少被直接使用,但理解梯度的意义以及沿着梯度反方向更新自变量可能降低目标函数值的原因是学习后续优化算法的基础。随后,我们将引出随机梯度下降(stochastic gradient descent)。7.2.1 一维梯度下降我们先以简单的一维梯度下降为例,解释梯度下降算法可能降低目标函数值的原因。假设连续可导的函数f:R→Rf:R→R f: \mathbb{R} \rig原创 2020-08-10 11:10:15 · 168 阅读 · 0 评论 -
动手学深度学习:7.1 优化与深度学习
7.1 优化与深度学习本节将讨论优化与深度学习的关系,以及优化在深度学习中的挑战。在一个深度学习问题中,我们通常会预先定义一个损失函数。有了损失函数以后,我们就可以使用优化算法试图将其最小化。在优化中,这样的损失函数通常被称作优化问题的目标函数(objective function)。依据惯例,优化算法通常只考虑最小化目标函数。其实,任何最大化问题都可以很容易地转化为最小化问题,只需令目标函数的相反数为新的目标函数即可。7.1.1 优化与深度学习的关系虽然优化为深度学习提供了最小化损失函数的方法,但本质上,原创 2020-08-10 11:02:48 · 623 阅读 · 0 评论 -
动手学深度学习:6.10 双向循环神经网络
6.10 双向循环神经网络之前介绍的循环神经网络模型都是假设当前时间步是由前面的较早时间步的序列决定的,因此它们都将信息通过隐藏状态从前往后传递。有时候,当前时间步也可能由后面时间步决定。例如,当我们写下一个句子时,可能会根据句子后面的词来修改句子前面的用词。双向循环神经网络通过增加从后往前传递信息的隐藏层来更灵活地处理这类信息。图6.12演示了一个含单隐藏层的双向循环神经网络的架构。图6.12 双向循环神经网络的架构下面我们来介绍具体的定义。给定时间步tt tbq∈R1×q为输出层的原创 2020-08-10 10:55:21 · 205 阅读 · 0 评论 -
动手学深度学习:6.9 深度循环神经网络
6.9 深度循环神经网络本章到目前为止介绍的循环神经网络只有一个单向的隐藏层,在深度学习应用里,我们通常会用到含有多个隐藏层的循环神经网络,也称作深度循环神经网络。图6.11演示了一个有LL LL个隐藏层的深度循环神经网络,每个隐藏状态不断传递至当前层的下一时间步和当前时间步的下一层。图6.11 深度循环神经网络的架构具体来说,在时间步tt th都是超参数。此外,如果将隐藏状态的计算换成门控循环单元或者长短期记忆的计算,我们可以得到深度门控循环神经网络。小结在深度循环神经网络中,原创 2020-08-10 10:32:07 · 209 阅读 · 0 评论 -
动手学深度学习:6.8 长短期记忆(LSTM)
6.8 长短期记忆(LSTM)本节将介绍另一种常用的门控循环神经网络:长短期记忆(long short-term memory,LSTM)[1]。它比门控循环单元的结构稍微复杂一点。6.8.1 长短期记忆LSTM 中引入了3个门,即输入门(input gate)、遗忘门(forget gate)和输出门(output gate),以及与隐藏状态形状相同的记忆细胞(某些文献把记忆细胞当成一种特殊的隐藏状态),从而记录额外的信息。6.8.1.1 输入门、遗忘门和输出门与门控循环单元中的重置门和更新门一样,如图6原创 2020-08-08 18:31:26 · 732 阅读 · 0 评论 -
动手学深度学习:6.7 门控循环单元(GRU)
6.7 门控循环单元(GRU)上一节介绍了循环神经网络中的梯度计算方法。我们发现,当时间步数较大或者时间步较小时,循环神经网络的梯度较容易出现衰减或爆炸。虽然裁剪梯度可以应对梯度爆炸,但无法解决梯度衰减的问题。通常由于这个原因,循环神经网络在实际中较难捕捉时间序列中时间步距离较大的依赖关系。门控循环神经网络(gated recurrent neural network)的提出,正是为了更好地捕捉时间序列中时间步距离较大的依赖关系。它通过可以学习的门来控制信息的流动。其中,门控循环单元(gated recur原创 2020-08-08 18:21:32 · 736 阅读 · 0 评论 -
动手学深度学习:6.6 通过时间反向传播
6.6 通过时间反向传播在前面两节中,如果不裁剪梯度,模型将无法正常训练。为了深刻理解这一现象,本节将介绍循环神经网络中梯度的计算和存储方法,即通过时间反向传播(back-propagation through time)。我们在3.14节(正向传播、反向传播和计算图)中介绍了神经网络中梯度计算与存储的一般思路,并强调正向传播和反向传播相互依赖。正向传播在循环神经网络中比较直观,而通过时间反向传播其实是反向传播在循环神经网络中的具体应用。我们需要将循环神经网络按时间步展开,从而得到模型变量和参数之间的依赖关原创 2020-08-08 18:20:21 · 184 阅读 · 0 评论 -
动手学深度学习:6.5 循环神经网络的简洁实现
6.5 循环神经网络的简洁实现本节将使用PyTorch来更简洁地实现基于循环神经网络的语言模型。首先,我们读取周杰伦专辑歌词数据集。import timeimport mathimport numpy as npimport torchfrom torch import nn, optimimport torch.nn.functional as Fimport syssys.path.append("…")import d2lzh_pytorch as d2ldevice = torch原创 2020-08-07 18:02:54 · 591 阅读 · 0 评论 -
动手学深度学习:6.4 循环神经网络的从零开始实现
6.4 循环神经网络的从零开始实现在本节中,我们将从零开始实现一个基于字符级循环神经网络的语言模型,并在周杰伦专辑歌词数据集上训练一个模型来进行歌词创作。首先,我们读取周杰伦专辑歌词数据集:import timeimport mathimport numpy as npimport torchfrom torch import nn, optimimport torch.nn.functional as Fimport syssys.path.append("…")import d2lzh_原创 2020-08-06 16:09:04 · 693 阅读 · 0 评论 -
动手学深度学习:6.3 语言模型数据集(周杰伦专辑歌词)
6.3 语言模型数据集(周杰伦专辑歌词)本节将介绍如何预处理一个语言模型数据集,并将其转换成字符级循环神经网络所需要的输入格式。为此,我们收集了周杰伦从第一张专辑《Jay》到第十张专辑《跨时代》中的歌词,并在后面几节里应用循环神经网络来训练一个语言模型。当模型训练好后,我们就可以用这个模型来创作歌词。6.3.1 读取数据集首先读取这个数据集,看看前40个字符是什么样的。import torchimport randomimport zipfilewith zipfile.ZipFile(’…/…/da原创 2020-08-06 11:32:28 · 1670 阅读 · 1 评论 -
动手学深度学习: 6.2 循环神经网络
6.2 循环神经网络上一节介绍的nn nHt+1的计算,并输入到当前时间步的全连接输出层。图6.1 含隐藏状态的循环神经网络我们刚刚提到,隐藏状态中XtWxh+Ht−1WhhXtWxh+Ht−1Whh \boldsymbol{X}_t \boldsymbol{W}_{xh} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hh}Whh连结后的矩阵。接下来,我们用一个具体的例子来验证这一点。首先,我们构造矩阵X、W_xh、H和W_hh,它们的形状分原创 2020-08-05 17:15:00 · 165 阅读 · 0 评论 -
动手学深度学习:6.1 语言模型
6.1 语言模型语言模型(language model)是自然语言处理的重要技术。自然语言处理中最常见的数据是文本数据。我们可以把一段自然语言文本看作一段离散的时间序列。假设一段长度为TT TP(w1,w2,w3,w4)P(w1,w2,w3,w4)P(w1,w...原创 2020-08-05 15:28:50 · 171 阅读 · 0 评论 -
动手学深度学习:5.10 批量归一化(Batch Normalization)
5.10 批量归一化本节我们介绍批量归一化(batch normalization)层,它能让较深的神经网络的训练变得更加容易 [1]。在3.16节(实战Kaggle比赛:预测房价)里,我们对输入数据做了标准化处理:处理后的任意一个特征在数据集中所有样本上的均值为0、标准差为1。标准化处理输入数据使各个特征的分布相近:这往往更容易训练出有效的模型。通常来说,数据标准化预处理对于浅层模型就足够有效了。随着模型训练的进行,当每层中参数更新时,靠近输出层的输出较难出现剧烈变化。但对深层神经网络来说,即使输入数据已原创 2020-08-05 10:18:26 · 576 阅读 · 0 评论 -
动手学深度学习:5.9 含并行连结的网络(GoogLeNet)
5.9 含并行连结的网络(GoogLeNet)在2014年的ImageNet图像识别挑战赛中,一个名叫GoogLeNet的网络结构大放异彩 [1]。它虽然在名字上向LeNet致敬,但在网络结构上已经很难看到LeNet的影子。GoogLeNet吸收了NiN中网络串联网络的思想,并在此基础上做了很大改进。在随后的几年里,研究人员对GoogLeNet进行了数次改进,本节将介绍这个模型系列的第一个版本。5.9.1 Inception 块GoogLeNet中的基础卷积块叫作Inception块,得名于同名电影《盗梦空原创 2020-08-04 18:04:09 · 396 阅读 · 0 评论 -
动手学深度学习:5.8 网络中的网络(NiN)
5.8 网络中的网络(NiN)前几节介绍的LeNet、AlexNet和VGG在设计上的共同之处是:先以由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果。其中,AlexNet和VGG对LeNet的改进主要在于如何对这两个模块加宽(增加通道数)和加深。本节我们介绍网络中的网络(NiN)[1]。它提出了另外一个思路,即串联多个由卷积层和“全连接”层构成的小网络来构建一个深层网络。5.8.1 NiN块我们知道,卷积层的输入和输出通常是四维数组(样本,通道,高,宽),而全连接层的输入和输出则原创 2020-08-04 16:54:00 · 343 阅读 · 0 评论 -
动手学深度学习:5.7 使用重复元素的网络(VGG)
5.7 使用重复元素的网络(VGG)AlexNet在LeNet的基础上增加了3个卷积层。但AlexNet作者对它们的卷积窗口、输出通道数和构造顺序均做了大量的调整。虽然AlexNet指明了深度卷积神经网络可以取得出色的结果,但并没有提供简单的规则以指导后来的研究者如何设计新的网络。我们将在本章的后续几节里介绍几种不同的深度网络设计思路。本节介绍VGG,它的名字来源于论文作者所在的实验室Visual Geometry Group [1]。VGG提出了可以通过重复使用简单的基础块来构建深度模型的思路。5.7.1原创 2020-08-04 15:32:55 · 434 阅读 · 0 评论 -
动手学深度学习:5.6 深度卷积神经网络(AlexNet)
5.6 深度卷积神经网络(AlexNet)在LeNet提出后的将近20年里,神经网络一度被其他机器学习方法超越,如支持向量机。虽然LeNet可以在早期的小数据集上取得好的成绩,但是在更大的真实数据集上的表现并不尽如人意。一方面,神经网络计算复杂。虽然20世纪90年代也有过一些针对神经网络的加速硬件,但并没有像之后GPU那样大量普及。因此,训练一个多通道、多层和有大量参数的卷积神经网络在当年很难完成。另一方面,当年研究者还没有大量深入研究参数初始化和非凸优化算法等诸多领域,导致复杂的神经网络的训练通常较困难。原创 2020-08-04 12:06:37 · 623 阅读 · 0 评论 -
python处理MNIST数据集
1. MNIST数据集1.1 MNIST数据集获取MNIST数据集是入门机器学习/模式识别的最经典数据集之一。最早于1998年Yan Lecun在论文:Gradient-based learning applied to document recognition.中提出。经典的LeNet-5 CNN网络也是在该论文中提出的。数据集包含了0-9共10类手写数字图片,每张图片都做了尺寸归一化,都是28x28大小的灰度图。每张图片中像素值大小在0-255之间,其中0是黑色背景,255是白色前景。如原创 2020-08-04 10:12:58 · 4321 阅读 · 1 评论 -
动手学深度学习: 5.5 卷积神经网络(LeNet)
5.5 卷积神经网络(LeNet)在3.9节(多层感知机的从零开始实现)里我们构造了一个含单隐藏层的多层感知机模型来对Fashion-MNIST数据集中的图像进行分类。每张图像高和宽均是28像素。我们将图像中的像素逐行展开,得到长度为784的向量,并输入进全连接层中。然而,这种分类方法有一定的局限性。图像在同一列邻近的像素在这个向量中可能相距较远。它们构成的模式可能难以被模型识别。对于大尺寸的输入图像,使用全连接层容易造成模型过大。假设输入是高和宽均为1000像素的彩色照片(含3个通道)。即使全连接层输出个原创 2020-08-03 17:46:23 · 523 阅读 · 1 评论 -
动手学深度学习:5.4 池化层
5.4 池化层回忆一下,在5.1节(二维卷积层)里介绍的图像物体边缘检测应用中,我们构造卷积核从而精确地找到了像素变化的位置。设任意二维数组X的i行j列的元素为X[i, j]。如果我们构造的卷积核输出Y[i, j]=1,那么说明输入中X[i, j]和X[i, j+1]数值不一样。这可能意味着物体边缘通过这两个元素之间。但实际图像里,我们感兴趣的物体不会总出现在固定位置:即使我们连续拍摄同一个物体也极有可能出现像素位置上的偏移。这会导致同一个边缘对应的输出可能出现在卷积输出Y中的不同位置,进而对后面的模式识别原创 2020-08-03 15:30:57 · 383 阅读 · 0 评论 -
动手学深度学习:5.3 多输入通道和多输出通道
5.3 多输入通道和多输出通道前面两节里我们用到的输入和输出都是二维数组,但真实数据的维度经常更高。例如,彩色图像在高和宽2个维度外还有RGB(红、绿、蓝)3个颜色通道。假设彩色图像的高和宽分别是hh h(1×1+2×2+4×3+5×4)+(0×0+1×1+3×2+4×3)=56。图5.4 含2个输入通道的互相关计算接下来我们实现含多个输入通道的互相关运算。我们只需要对每个通道做互相关运算,然后通过add_n函数来进行累加。import torchfrom torch import nn原创 2020-08-03 15:10:08 · 1177 阅读 · 0 评论 -
动手学深度学习:5.2 填充和步幅
5.2 填充和步幅在上一节的例子里,我们使用高和宽为3的输入与高和宽为2的卷积核得到高和宽为2的输出。一般来说,假设输入形状是nh×nwnh×nw n_h\times n_w0×0+0×1+0×2+0×3=0。图5.2 在输入的高和宽两侧分别填充了0元素的二维互相关计算一般来说,如果在高的两侧一共填充phph p_h⌊ph/2⌋行。在宽的两侧填充同理。卷积神经网络经常使用奇数高宽的卷积核,如1、3、5和7,所以两端上的填充个数相等。对任意的二维数组X,设它的第i行第j列的元素为原创 2020-08-03 14:18:48 · 358 阅读 · 0 评论 -
动手学深度学习:5.1 二维卷积层
5.1 二维卷积层卷积神经网络(convolutional neural network)是含有卷积层(convolutional layer)的神经网络。本章中介绍的卷积神经网络均使用最常见的二维卷积层。它有高和宽两个空间维度,常用来处理图像数据。本节中,我们将介绍简单形式的二维卷积层的工作原理。5.1.1 二维互相关运算虽然卷积层得名于卷积(convolution)运算,但我们通常在卷积层中使用更加直观的互相关(cross-correlation)运算。在二维卷积层中,一个二维输入数组和一个二维核(ke原创 2020-08-03 09:41:04 · 389 阅读 · 0 评论 -
动手学深度学习:4.6 GPU计算
4.6 GPU计算到目前为止,我们一直在使用CPU计算。对复杂的神经网络和大规模的数据来说,使用CPU来计算可能不够高效。在本节中,我们将介绍如何使用单块NVIDIA GPU来计算。所以需要确保已经安装好了PyTorch GPU版本。准备工作都完成后,下面就可以通过nvidia-smi命令来查看显卡信息了。!nvidia-smi # 对Linux/macOS用户有效Copy to clipboardErrorCopied输出:Sun Mar 17 14:59:57 2019 +-------原创 2020-08-01 15:36:11 · 480 阅读 · 0 评论 -
动手学深度学习:4.5 读取和存储
4.5 读取和存储到目前为止,我们介绍了如何处理数据以及如何构建、训练和测试深度学习模型。然而在实际中,我们有时需要把训练好的模型部署到很多不同的设备。在这种情况下,我们可以把内存中训练好的模型参数存储在硬盘上供后续读取使用。4.5.1 读写Tensor我们可以直接使用save函数和load函数分别存储和读取Tensor。save使用Python的pickle实用程序将对象进行序列化,然后将序列化的对象保存到disk,使用save可以保存各种对象,包括模型、张量和字典等。而load使用pickle unpi原创 2020-08-01 13:40:20 · 620 阅读 · 0 评论 -
动手学深度学习:4.3 模型参数的延后初始化
4.3 模型参数的延后初始化由于使用Gluon创建的全连接层的时候不需要指定输入个数。所以当调用initialize函数时,由于隐藏层输入个数依然未知,系统也无法得知该层权重参数的形状。只有在当形状已知的输入X传进网络做前向计算net(X)时,系统才推断出该层的权重参数形状为多少,此时才进行真正的初始化操作。但是使用PyTorch在定义模型的时候就要指定输入的形状,所以也就不存在这个问题了,所以本节略。有兴趣的可以去看看原文,传送门。...原创 2020-07-31 15:17:44 · 200 阅读 · 0 评论 -
动手学深度学习:4.2 模型参数的访问、初始化和共享
4.2 模型参数的访问、初始化和共享在3.3节(线性回归的简洁实现)中,我们通过init模块来初始化模型的参数。我们也介绍了访问模型参数的简单方法。本节将深入讲解如何访问和初始化模型参数,以及如何在多个层之间共享同一份模型参数。我们先定义一个与上一节中相同的含单隐藏层的多层感知机。我们依然使用默认方式初始化它的参数,并做一次前向计算。与之前不同的是,在这里我们从nn中导入了init模块,它包含了多种模型初始化方法。import torchfrom torch import nnfrom torch.nn原创 2020-07-31 12:09:01 · 420 阅读 · 0 评论 -
动手学深度学习:4.1 模型构造
4.1 模型构造让我们回顾一下在3.10节(多层感知机的简洁实现)中含单隐藏层的多层感知机的实现方法。我们首先构造Sequential实例,然后依次添加两个全连接层。其中第一层的输出大小为256,即隐藏层单元个数是256;第二层的输出大小为10,即输出层单元个数是10。我们在上一章的其他节中也使用了Sequential类构造模型。这里我们介绍另外一种基于Module类的模型构造方法:它让模型构造更加灵活。注:其实前面我们陆陆续续已经使用了这些方法了,本节系统介绍一下。4.1.1 继承Module类来构造原创 2020-07-31 11:19:57 · 265 阅读 · 0 评论