自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 第四章第12节 稠密连接网络(DenseNet)

ResNet中的跨层连接设计引申出了数个后续工作。本节我们介绍其中的一个:稠密连接网络(DenseNet)。它与ResNet的主要区别如图4.10所示。 图4.10:ResNet(左)与DenseNet(右)在跨层连接上的主要区别:使用相加和使用连结图4.10中将部分前后相邻的运算抽象为模块A和模块B。...

2019-09-24 23:20:09 1802

原创 第四章第十一节 残差网络(ResNet)

让我们先思考一个问题:对神经网络模型添加新的层,充分训练后的模型是否只可能更有效地降低训练误差?理论上,原模型解的空间只是新模型解的空间的子空间。也就是说,如果我们能将新添加的层训练成恒等映射,新模型和原模型将同样有效。由于新模型可能得出更优的解来拟合训练数据集,因此添加层似乎更容易降低训练误差。然而在实践中,添加过多的层后训练误差往往不降反升。即使利用批量归一化带来的数值稳定性使训练层模型更加容...

2019-09-23 00:19:37 963

原创 第四章第10节 批量归一化

本节我们将介绍批量归一化(batch normalization)层,它能让较深的神经网络的训练变得更加容易。在“实战Kaggle比赛:预测房价”一节里,我们对输入数据做了标准化处理:处理后的任意一个特征在数据集中所有样本上的均值为0、标准差为1。标准化处理输入数据使各个特征的分布相近:这往往更容易训练出有效的模型。通常来说,数据标准化预处理对于浅层模型就足够有效了。随着模型训练的进行,当每层...

2019-09-21 22:46:38 446

原创 第四章第9节 含并行连接的网络(GoogLeNet)

在2014年的ImageNet图像识别挑战赛中,一个名叫GoogLeNet的网络结构大放异彩。它虽然在名字上向LeNet致敬,但在网络结构上已经很难看到LeNet的影子。GoogleNet吸收了NiN中网络串联网络的思想,并在此基础上做了很大改进。在随后的几年里,研究人员对GoogLeNet进行了数次改进,本节将介绍这个模型系列的第一个版本。4.9.1 Inception块GoogLeNe...

2019-09-21 20:00:18 287

原创 第四章第8节 网络中的网络(NiN)

前几节介绍的LeNet、AlexNet和VGG在设计上的共同之处是:先以由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果。其中,AlexNet和VGG对LeNet的改进主要在于如何对这两个模块加宽(增加通道数)和加深。本节我们介绍网络中的网络(NiN)。它提出了另外一个思路,即串联多个由卷积层和“全连接”层构成的小网络来构建一个深层网络。4.8.1 NiN块我们知...

2019-09-18 23:42:03 383

原创 第四章第7节 使用重复元素的网络(VGG)

AlexNet在LeNet的基础上增加了3个卷积层。但AlexNet作者对它们的卷积窗口、输出通道和构造顺序均做了大量的调整。虽然AlexNet指明了深度卷积神经网络可以取得出色的结果,但并没有提供简单的规则以指导后来的研究者如何设计新的网络。我们将在本章的后续几节里介绍几种不同的深度网络设计思路。本节介绍VGG,它的名字来源于论文作者所在的实验室Visual Geometry Group。V...

2019-09-17 23:51:05 236

原创 第四章第六节 深度卷积神经网络(AlexNet)

在LeNet提出后的将近20年里,神经网络一度被其他机器学习方法超越,如支持向量机。虽然LeNet可以在早期的小数据集上取得好的成绩,但是在更大的真实数据集上的表现并不尽如人意。一方面,神经网络计算复杂。虽然20世纪90年代也有过一些针对神经网络的加速硬件,但并没有像之后GPU那样大量普及。因此,训练一个多通道、多层和有大量参数的卷积神经网络在当年很难完成。另一方面,当年研究者还没有大量深入研究参...

2019-09-16 23:34:14 430

原创 第四章第五节 卷积神经网络(LeNet)

在“多层感知机的从零开始实现”一节里我们构造了一个含单隐藏层的多层感知机模型来对Fashion-MNIST数据集中的图像进行分类。每张图像高和宽均是28像素。我们将图像中的像素逐行展开,得到长度为784的向量,并输入进全连接层中。然而,这种分类方法有一定的局限性。1.图像在同一列邻近的像素在这个向量中可能相距较远。它们构成的模式可能难以被模型识别。2.对于大尺寸的输入图像,使用全连接层容易...

2019-09-15 18:53:13 555

原创 第四章第四节 池化层

回忆一下,在“二维卷积层”一节里介绍的图像物体边缘检测应用中,我们构造卷积核从而精确地找到了像素变化的位置。设任意二维数组X的i行j列的元素为X[i, j]。如果我们构造的卷积核输出Y[i, j]=1,那么说明输入中X[i, j]和X[i, j + 1]数值不一样。这可能意味着物体边缘通过这俩个元素之间。但实际图像里,我们感兴趣的物体不会总出现再固定位置:即使我们连续拍摄同一个物体也极有可能出现像...

2019-09-14 20:53:50 1934

原创 第四章第三节 多输入通道和多输出通道

前面两节里我们用到的输入和输出都是二维数组,但真实数据的维度经常更高。例如,彩色图像在高和宽2个维度外还有RGB(红、绿、蓝)3个颜色通道。假设彩色图像的高和宽分别是和(像素),那么它可以表示为一个的多维数组。我们将大小为3的这一维称为通道(channel)维。本节我们将介绍含多个输入通道或输出通道的卷积核。4.3.1 多输入通道当输入数据含多个通道时,我们需要构造一个输入通道数与输入数据...

2019-09-09 20:45:51 1641

原创 第四章第二节 填充和步幅

在上一节的例子里,我们使用高和宽为3的输入与高和宽为2的卷积核得到高和宽为2的输出。一般来说,假设输入形状是,卷积窗口形状是,那么输出形状将会是 所以卷积层的输出形状由输入性状和卷积核窗口形...

2019-09-05 00:02:41 281

原创 第四章 卷积神经网络

本章将介绍卷积神经网络。它是近年来深度学习能在计算机视觉领域取得突破性成果的基石。它也逐渐在被其他诸如自然语言处理、推荐系统和语音识别等领域广泛使用。我们将先描述卷积神经网络中卷积层和池化层的工作原理,并解释填充、步幅、输入通道和输出通道的含义。在掌握了这些基础知识以后,我们将探究数个具有代表性的神经网络的设计思路。这些模型包括最早提出的AlexNet,以及后来的使用重复元素的网络(VGG)、网络...

2019-09-01 23:46:28 814

原创 第三章第六节 GPU计算

到目前为止,我们一直在使用CPU计算。对复杂的神经网络和大规模的数据来说,使用CPU来计算可能不够高效。在本节中,我们将介绍如何使用单块NVIDIA GPU来计算。首先,需要确保已经安装好了至少一块NVIDIA GPU。然后,下载CUDA并按照提示设置好响应的路径(可参考附录中“使用AWS运行代码”一节)。这些准备工作都完成后,下面就可以通过nvidia-smi命令来查看显卡信息了。3.6.1...

2019-09-01 13:19:30 272

原创 第三章第五节 读取和存储

到目前为止,我们介绍了如何处理数据以及如何构建、训练和测试深度学习模型。然而在实际中,我们有时需要把训练好的模型部署到很多不同的设备。在这种情况下,我们可以把内存中训练好的模型参数存储在硬盘上供后续读取使用。3.5.1 读写NDArray我们可以直接使用save函数和load函数分别存储和读取NDArray。下面的例子创建了NDArray变量x, 并将其存在文件名同为x的文件里。然...

2019-09-01 12:23:40 135

原创 第三章第四节 自定义层

深度学习的一个魅力在于神经网络中各式各样的层,例如全连接层和后面章节中将要介绍的卷积层、池化层与循环层。虽然Gluon提供了大量常用的层,但有时候我们依然希望自定义层。本节将 介绍如何使用NDArray来自定义一个Gluon的层,从而可以被重复调用。3.4.1 不含模型参数的自定义层我们先介绍如何定义一个不含模型参数的自定义层。事实上,这和“模型构造”一节中介绍的使用Block类构造模型类...

2019-09-01 11:48:24 136

原创 第三章第三节 模型参数的延后初始化

如果做了上一节练习,你会发现模型net在调用初始化函数initialize之后、在做前向计算net(X)之前时,权重参数的形状中出现了0.虽然直觉上initialize完成了所有参数初始化过程,然而这在Gluon中却是不一定的。我们在本节中详细讨论这个话题。3.3.1 延后初始化也许读者早就注意到了,在之前使用Gluon创建的全连接层都没有指定输入个数。例如,在上一节使用的多层感知机net...

2019-08-28 23:27:14 391

原创 第三章第二节 模型参数的访问、初始化和共享

在“线性回归的简洁实现”一节中,我们通过init模块来初始化模型的全部参数。我们也介绍了访问模型参数的简单方法。本节将深入讲解如何访问和初始化模型参数,以及如何在多个层之间共享一份模型参数。我们先定义一个与上一节中相同的含单隐藏层的多层感知机。我们依然使用默认方式初始化它的参数,并做一次前向计算。与之前不同的是,在这里我们从MXNet中导入了init模块,它包含了多种模型初始化方法。3...

2019-08-27 23:52:30 576

原创 第三章第一节 深度学习计算之模型计算

上一章介绍了包括多层感知机在内的简单深度学习模型的原理和实现。本章我们将简要概括深度学习计算的各个重要组成部分,如模型构造、参数的访问和初始化等,自定义层,读取、存储和使用GPU。通过本章的学习,我们将能够深入了解模型实现和计算的各个细节,并为在之后章节实现更复杂模型打下坚实的基础。3.1 模型构造让我们回顾一下在“多层感知机的简洁实现”一节中含单隐藏层的多层感知机的实现方法。我们首先构造...

2019-08-26 00:03:24 877

原创 第二章番外篇 实战Kaggle比赛:房价预测

1. 获取和读取数据集比赛数据分为训练数据集和测试数据集。两个数据集都包括每栋房子的特征,如街道类型、建造年份、房顶类型、地下室状况等特征值。这些特征值有连续的数字、离散的标签甚至是缺失值“na”。只有训练数据集包括了每栋房子的价格,也就是标签。我们可以访问比赛网页下载这些数据集。我们将通过pandas库读入并处理数据。在导入本节需要的包前请确认已安装pandas库,否则请参考下面的代码注...

2019-08-25 22:43:20 408 1

原创 第二章第8节 数值稳定性和模型初始化

理解了正向传播与反向传播以后,我们来讨论一下深度学习模型的数值稳定性以及模型参数的初始化方法。深度学习模型有关数值稳定性的典型问题是衰减(vanishing)和爆炸(explosion)。2.8.1 衰减和爆炸当神经网络的层数较多时,模型的数值稳定性容易变差。假设一个层数为的多层感知机的第层的权重参数为。为了便于讨论,不考虑偏差参数,且设所有隐藏层的激活函数为恒等映射(identity m...

2019-08-20 22:40:43 256

原创 第二章第7节 正向传播、反向传播和计算图

前面几节里我们使用了小批量随机梯度下降的优化算法来训练模型。在实现中,我们只提供了模型的正向传播(forward propagztion)的计算,即对输入计算模型输出,然后通过autograd模块来调用系统自动生成的backward函数来计算梯度。基于反向传播(back-propagation)算法的自动求梯度极大简化了深度学习模型训练算法的实现。本节我们将使用数学和计算图(computation...

2019-08-19 23:46:04 757

原创 第二章第6节 丢弃法(droupout)

除了前一节介绍的权重衰减以外,深度学习模型常常使用丢弃法来应对过拟合问题。丢弃法有一些不同的变体。本节中提到的丢弃法特指倒置丢弃法(inverted dropout)。2.6.1 方法回忆一下,“多层感知机”一节的图中描述了一个单隐藏层的多层感知机。其中输入个数为4,隐藏单元个数为5,且隐藏单元()的计算表达式为 ...

2019-08-15 23:46:52 3293

原创 第二章第5节 权重衰减

上一节中我们观察了过拟合现象,即魔性的训练误差远小于它在测试集上的误差。虽然增大训练数据集可能会减轻过拟合,但是获取额外的训练数据往往代价高昂。本节介绍应对过拟合问题的常用方法:权重衰减(weight decay)。2.5.1 方法权重衰减等价于范数正则化(regularization)。正则化通过为模型损失函数添加惩罚项使学出的模型参数值较小,是应对过拟合的常用手段。我们先描述范数正则化...

2019-08-14 23:47:57 347 1

原创 第二章第4节 模型选择、欠拟合和过拟合

在前几节基于Fashion-MNIST数据集的实验中,我们评价了机器学习模型在训练数据集和测试数据集上的表现。如果你改变过实验中的模型结构或者超参数,你也许发现了:当模型在训练数据集上更精确时,它在测试数据集上却不一定更准确。为何?2.4.1 训练误差和泛化误差在解释上述现象之前,我们需要区分训练误差(training error)和泛化误差(generalization error)。通...

2019-08-12 23:08:13 453

原创 第二章第3节 多层感知机的间接实现

下面我们使用Gluon来实现上一节中的多层感知机。首先导入所需的包或模块。2.3.1 定义模型和softmax回归唯一的不同在于,我们多加了一个全连接层作为隐藏层。它的隐藏单元个数为256,并使用ReLu函数作为激活函数。2.3.2 读取数据并训练模型我们使用与“softmax回归的简洁实现”一节中训练softmax回归几乎相同的步骤来读取数据并训练模型。...

2019-08-10 18:37:38 126

原创 第二章第2节 多层感知机的从零开始实现

我们已经从上一节里了解了多层感知机的原理。下面,我们一起来动手实现一个多层感知机。首先导入实现所需的包或模块。2.2.1 获取和读取数据2.2.2 定义模型参数我们在“softmax回归的从零开始实现”一节里介绍了,Fashion-MNIST数据集中图像形状为28x28,类别数为10。本节中我们依然使用长度为28x28=784的向量表示每一张图像。因此,输入个数为784,输出个...

2019-08-10 17:34:13 222

原创 第二章第1节 多层感知机

我们已经介绍了包括现行回归和softmax回归在内的单层神经网络。然而深度学习主要关注多层模型。从本章开始,我们将以多层感知机(multilayer perceptron,MLP)为例,介绍多层神经网络的概念。2.1.1 隐藏层多层感知机在单层神经网络的基础上引入了一到多个隐藏层(hidden layer)。隐藏层位于输入层和输出层之间。图2.1展示了一个多层感知机的神经网络图。 ...

2019-08-08 23:42:10 761

原创 第一章第6节 softmax回归的间接实现

我们在“线性回归的简洁实现”一节中已经了解了使用Gluon实现模型的便利。下面,让我们再次使用Gluon来实现一个softmax回归模型。首先导入所需的包或模块。1.6.1 获取和读取数据我们仍然使用Fashion-MNIST数据集和上一节中设置的批量大小。1.6.2 定义和初始化模型在“softmax回归”一节中提到,softmax回归的输出层是一个全连接层。因此,我们添...

2019-08-07 22:34:22 168 1

原创 第一章第5节 softmax回归的从零开始实现

这一节我们来动手实现softmax回归。首先导入本节实现所需的包或模块。1.5.1 获取和读取数据1.5.2 初始化模型参数跟线性回归中的例子一样,我们将使用向量表示每个样本。已知每个样本输入时高和宽均为28像素的图像。模型的输入人向量的长度是28x28=784:该向量的每个元素对应图像中每个像素。由于图像有10个类别,单层神经网络输出层的输出个数为10,因此softmax回归...

2019-08-07 00:02:57 375

原创 第一章第4节 图像分类数据集(Fashion-MNIST)

在介绍softmax回归的实现前我们先引入一个多类图像分类数据集。它将在后面的章节中被多次使用,以方便我们观察比较算法之间在模型精度和计算效率上的区别。图像分类数据集中最常用的是手写数字识别数据集MNIST。但大部分模型在MNIST上的分类精度都超过了95%。为了更直观地观察算法之间的差异,我们将使用一个图像内容更加复杂的数据集Fashion-MNIST。1.4.1 获取数据集下面,我...

2019-08-04 23:12:50 731 1

原创 第一章第3节——softmax回归

前面介绍的线性回归模型适用于输出为连续值的情景。在另一类情境中,模型输出是一个像图像类别这样的离散值。对于这样的离散值预测问题,我们可以使用诸如softmax回归在内的分类模型。和线性回归不同,softmax回归的输出单元从一个变成了多个,且引入了softmax运算使输出更适合离散值的预测和训练。本节以softmax回归模型为例,介绍神经网络中的分类模型。1.3.1 分类问题让我们考虑一个...

2019-08-04 10:34:27 260

原创 第一章第2节-删繁就简(线性回归的简洁实现)

上节介绍了线性回归的实现方法,实践中,我们通常可以用比上一节更简洁的代码来实现同样的模型。在本节中,我们将介绍如何使用MXNet提供的Gluon接口更方便地实现线性回归的训练。1.2.1 生成数据集我们生成与上一节中相同的数据集。其中features是训练数据特征,labels是标签。1.2.2读取数据Gluon提供了data包来读取数据。由于data常用作变量名,我们将导入的...

2019-07-30 23:26:39 114

转载 第一章第1节-机器学习算法之线性回归

深度学习学习作为机器学习的一个分支,要想充分理解必须对机器学习的基本原理要有深刻理解。首先介绍下算法,然后再通过线性回归将这些抽象的概念具体化。1.1 学习算法机器学习的算法是一种计算机能够从数据中学习的算法。此处的“学习”,Mitchell(1997)提供了一个简洁的定义:对于某类任务T和性能度量P,一个计算机程序被认为可以从经验E中学习是指,通过经验E改进后,它在任务T上由性能度量P衡...

2019-07-29 23:33:40 554

原创 第零章第2节——工欲善其事必先利其器

0.2 MXNet框架0.2.1 数据操作 在MXNet中,NDArray是一个类,也是存储和变换数据的主要工具,下面介绍其常用方法。0.2.1.1 创建NDArray先介绍下NDArray的基本功能。首先从MXNet导入ndarray模块 然后我们用arrange函数创建一个行向量。这时返回一个NDArray实例,其中包...

2019-07-21 22:10:26 138

原创 第零章第1节——万丈高楼地下起

0.1 数学基础本章列出深度学习中常用的线性代数、微积分和概率论中常用到的数学基础,这些基本的数学基础构成当前人工智能算法大厦的基石。0.1.1 线性代数0.1.1.1 标量、向量、张量和矩阵标量(scalar):一个单独的数(整数或实数)。如x 向量(vector):线性代数中的向量分为行向量和列向量,在此处无特殊说明时向量指的是列向量既用一列“[]”括起来的数。如向量克表示成...

2019-07-21 14:24:41 175

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除