一鸣整理

全新版本,李沐《动手学深度学习》TF2.0版本来了

还记得李沐老师的《动手学深度学习》吗?近日,该书的 TF2.0 代码复现项目来了。

UC 伯克利李沐的《动手学深度学习》开源书一经推出便广受好评。很多开发者使用了书的内容,并采用各种各样的深度学习框架将其复现。据机器之心所知,现在已有 MXnet(原版)和 PyTorch 版本。

近日,《动手学深度学习》书又有了一个新的复现代码版本——TensorFlow2.0 版。这一项目登上了 12 月 9 日的 GitHub 热榜,一天获得了百星。

项目地址:https://github.com/TrickyGo/Dive-into-DL-TensorFlow2.0

项目作者表示,该项目是基于中文版的书进行的更新和重构,在代码上参考了 PyTorch 版本。目前该项目已更新到第五章,仍在继续更新。

本项目主要两位作者来自北大软件和微电子学院。项目已获得李沐老师本人同意。

TF2.0 版的《动手学》怎么样

本项目包括 code 和 doc 两个文件夹。其中 code 保存了 Jupyter 格式的代码,而 doc 则是 md 格式的书籍文件。由于原书使用的是 MXnet,因此代码和文本略有不同。

书籍内容展示

考虑到 md 格式对公式的展示不太优秀,作者使用 docsify (https://docsify.js.org/#/zh-cn/) 将文本转到了 GitHub pages 上,你可以像浏览网页那样阅读全书。

网页展示地址:https://trickygo.github.io/Dive-into-DL-TensorFlow2.0

从网页来看,目前确实更新到了第五章,但是考虑到这是一个小团队做的代码重构工作,能完成这么多实属不易。

代码展示

在书中,代码和文本是穿插进行了,因此可以一边读书一边写代码复现,还可以随时随地检查结果。

以「构建 MLP 网络」为例,作者提供了最 Python 的复现方法——为模型定义一个类,并继承 tf.keras.Model 的基类。在 TF2.0 的代码中,这是一种较为稳妥的方法。

当然,也有这样较为简单的实现代码。总之,代码非常简洁易懂。

全书目录

和之前机器之心介绍过的一样,这里提供全书目录,供读者参考。

  • 简介

  • 阅读指南

  • 1. 深度学习简介


  • 2. 预备知识

  • 2.1 环境配置

  • 2.2 数据操作

  • 2.3 自动求梯度

  • 2.4 查阅文档


  • 3. 深度学习基础

  • 3.1 线性回归

  • 3.2 线性回归的从零开始实现

  • 3.3 线性回归的简洁实现

  • 3.4 softmax回归

  • 3.5 图像分类数据集(Fashion-MNIST)

  • 3.6 softmax回归的从零开始实现

  • 3.7 softmax回归的简洁实现

  • 3.8 多层感知机

  • 3.9 多层感知机的从零开始实现

  • 3.10 多层感知机的简洁实现

  • 3.11 模型选择欠拟合过拟合

  • 3.12 权重衰减

  • 3.13 丢弃法

  • 3.14 正向传播、反向传播和计算图

  • 3.15 数值稳定性和模型初始化

  • 3.16 实战Kaggle比赛:房价预测


  • 4. 深度学习计算

  • 4.1 模型构造

  • 4.2 模型参数的访问、初始化和共享

  • 4.3 模型参数的延后初始化

  • 4.4 自定义层

  • 4.5 读取和存储

  • 4.6 GPU计算


  • 5. 卷积神经网络

  • 5.1 二维卷积层

  • 5.2 填充和步幅

  • 5.3 多输入通道和多输出通道

  • 5.4 池化

  • 5.5 卷积神经网络LeNet

  • 5.6 深度卷积神经网络(AlexNet)

  • 5.7 使用重复元素的网络(VGG

  • 5.8 网络中的网络(NiN)

  • 5.9 含并行连结的网络(GoogLeNet

  • 5.10 批量归一化

  • 5.11 残差网络(ResNet)

  • 5.12 稠密连接网络(DenseNet)


  • 6. 循环神经网络

  • 6.1 语言模型

  • 6.2 循环神经网络

  • 6.3 语言模型数据集(周杰伦专辑歌词)

  • 6.4 循环神经网络的从零开始实现

  • 6.5 循环神经网络的简洁实现

  • 6.6 通过时间反向传播

  • 6.7 门控循环单元(GRU)

  • 6.8 长短期记忆(LSTM)

  • 6.9 深度循环神经网络

  • 6.10 双向循环神经网络


  • 7. 优化算法

  • 7.1 优化与深度学习

  • 7.2 梯度下降和随机梯度下降

  • 7.3 小批量随机梯度下降

  • 7.4 动量

  • 7.5 AdaGrad算法

  • 7.6 RMSProp算法

  • 7.7 AdaDelta算法

  • 7.8 Adam算法


  • 8. 计算性能

  • 8.1 命令式和符号式混合编程

  • 8.2 异步计算

  • 8.3 自动并行计算

  • 8.4 多GPU计算


  • 9. 计算机视觉

  • 9.1 图像增广

  • 9.2 微调

  • 9.3 目标检测和边界框

  • 9.4 锚框

  • 9.5 多尺度目标检测

  • 9.6 目标检测数据集(皮卡丘)

  • 待更新...


  • 10. 自然语言处理

  • 10.1 词嵌入word2vec

  • 10.2 近似训练

  • 10.3 word2vec的实现

  • 10.4 子词嵌入fastText

  • 10.5 全局向量的词嵌入GloVe

  • 10.6 求近义词和类比词

  • 10.7 文本情感分类:使用循环神经网络

  • 10.8 文本情感分类:使用卷积神经网络(textCNN)

  • 10.9 编码器—解码器(seq2seq)

  • 10.10 束搜索

  • 10.11 注意力机制

  • 10.12 机器翻译

怎样使用这一项目

作者在项目介绍中提供了两种使用方法,你可以从网页上阅读全书和配套代码,并一步一步跟着复现。当然,还有另一种本地浏览的方法。

具体而言,你需要首先安装 docify-cli 工具:

npm i docsify-cli -g

接着将本项目 clone 到本地并进入目录:

git clone https://github.com/TrickyGo/Dive-into-DL-TensorFlow2.0
cd Dive-into-DL-TensorFlow2.0

然后可以运行一个本地服务器,你可以在浏览器中输入 http://localhost:3000,然后就可以实时访问文档并查看渲染效果了。

docsify serve docs
工程书籍代码TensorFlow 2.0实现李沐
4
相关数据
李沐人物

李沐,2008年毕业于上海交通大学计算机系,大学期间,曾在微软亚洲研究院担任实习生。2017年博士毕业后,李沐加入亚马逊任AI主任科学家。

池化技术

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

欠拟合技术

使用太少参数,以致于不能很好的拟合数据,称为拟合不足(欠拟合)现象

GloVe技术

Stanford开发的用于词向量表示的一个库/工具

重构技术

代码重构(英语:Code refactoring)指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果。 软件重构需要借助工具完成,重构工具能够修改代码同时修改所有引用该代码的地方。在极限编程的方法学中,重构需要单元测试来支持。

多层感知机技术

感知机(Perceptron)一般只有一个输入层与一个输出层,导致了学习能力有限而只能解决线性可分问题。多层感知机(Multilayer Perceptron)是一类前馈(人工)神经网络及感知机的延伸,它至少由三层功能神经元(functional neuron)组成(输入层,隐层,输出层),每层神经元与下一层神经元全互连,神经元之间不存在同层连接或跨层连接,其中隐层或隐含层(hidden layer)介于输入层与输出层之间的,主要通过非线性的函数复合对信号进行逐步加工,特征提取以及表示学习。多层感知机的强大学习能力在于,虽然训练数据没有指明每层的功能,但网络的层数、每层的神经元的个数、神经元的激活函数均为可调且由模型选择预先决定,学习算法只需通过模型训练决定网络参数(连接权重与阈值),即可最好地实现对于目标函数的近似,故也被称为函数的泛逼近器(universal function approximator)。

VGG技术

2014年,牛津大学提出了另一种深度卷积网络VGG-Net,它相比于AlexNet有更小的卷积核和更深的层级。AlexNet前面几层用了11×11和5×5的卷积核以在图像上获取更大的感受野,而VGG采用更小的卷积核与更深的网络提升参数效率。VGG-Net 的泛化性能较好,常用于图像特征的抽取目标检测候选框生成等。VGG最大的问题就在于参数数量,VGG-19基本上是参数量最多的卷积网络架构。VGG-Net的参数主要出现在后面两个全连接层,每一层都有4096个神经元,可想而至这之间的参数会有多么庞大。

词嵌入技术

词嵌入是自然语言处理(NLP)中语言模型与表征学习技术的统称。概念上而言,它是指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

注意力机制技术

我们可以粗略地把神经注意机制类比成一个可以专注于输入内容的某一子集(或特征)的神经网络. 注意力机制最早是由 DeepMind 为图像分类提出的,这让「神经网络在执行预测任务时可以更多关注输入中的相关部分,更少关注不相关的部分」。当解码器生成一个用于构成目标句子的词时,源句子中仅有少部分是相关的;因此,可以应用一个基于内容的注意力机制来根据源句子动态地生成一个(加权的)语境向量(context vector), 然后网络会根据这个语境向量而不是某个固定长度的向量来预测词。

计算机视觉技术

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

LeNet技术

LeNet 诞生于 1994 年,是最早的卷积神经网络之一,并且推动了深度学习领域的发展。自从 1988 年开始,在许多次成功的迭代后,这项由 Yann LeCun 完成的开拓性成果被命名为 LeNet5。LeNet5 的架构基于这样的观点:(尤其是)图像的特征分布在整张图像上,以及带有可学习参数的卷积是一种用少量参数在多个位置上提取相似特征的有效方式。在那时候,没有 GPU 帮助训练,甚至 CPU 的速度也很慢。因此,能够保存参数以及计算过程是一个关键进展。这和将每个像素用作一个大型多层神经网络的单独输入相反。LeNet5 阐述了那些像素不应该被使用在第一层,因为图像具有很强的空间相关性,而使用图像中独立的像素作为不同的输入特征则利用不到这些相关性。

机器翻译技术

机器翻译(MT)是利用机器的力量「自动将一种自然语言(源语言)的文本翻译成另一种语言(目标语言)」。机器翻译方法通常可分成三大类:基于规则的机器翻译(RBMT)、统计机器翻译(SMT)和神经机器翻译(NMT)。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

门控循环单元技术

门控循环单元(GRU)是循环神经网络(RNN)中的一种门控机制,与其他门控机制相似,其旨在解决标准RNN中的梯度消失/爆炸问题并同时保留序列的长期信息。GRU在许多诸如语音识别的序列任务上与LSTM同样出色,不过它的参数比LSTM少,仅包含一个重置门(reset gate)和一个更新门(update gate)。

线性回归技术

在现实世界中,存在着大量这样的情况:两个变量例如X和Y有一些依赖关系。由X可以部分地决定Y的值,但这种决定往往不很确切。常常用来说明这种依赖关系的最简单、直观的例子是体重与身高,用Y表示他的体重。众所周知,一般说来,当X大时,Y也倾向于大,但由X不能严格地决定Y。又如,城市生活用电量Y与气温X有很大的关系。在夏天气温很高或冬天气温很低时,由于室内空调、冰箱等家用电器的使用,可能用电就高,相反,在春秋季节气温不高也不低,用电量就可能少。但我们不能由气温X准确地决定用电量Y。类似的例子还很多,变量之间的这种关系称为“相关关系”,回归模型就是研究相关关系的一个有力工具。

梯度下降技术

梯度下降是用于查找函数最小值的一阶迭代优化算法。 要使用梯度下降找到函数的局部最小值,可以采用与当前点的函数梯度(或近似梯度)的负值成比例的步骤。 如果采取的步骤与梯度的正值成比例,则接近该函数的局部最大值,被称为梯度上升。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

随机梯度下降技术

梯度下降(Gradient Descent)是遵循成本函数的梯度来最小化一个函数的过程。这个过程涉及到对成本形式以及其衍生形式的认知,使得我们可以从已知的给定点朝既定方向移动。比如向下朝最小值移动。 在机器学习中,我们可以利用随机梯度下降的方法来最小化训练模型中的误差,即每次迭代时完成一次评估和更新。 这种优化算法的工作原理是模型每看到一个训练实例,就对其作出预测,并重复迭代该过程到一定的次数。这个流程可以用于找出能导致训练数据最小误差的模型的系数。

GoogLeNet技术

同样在2014年,谷歌提出了 GoogLeNet(或Inception-v1)。该网络共有22层,且包含了非常高效的Inception模块,它同样没有如同VGG-Net那样大量使用全连接网络,因此参数量非常小。GoogLeNet最大的特点就是使用了Inception模块,它的目的是设计一种具有优良局部拓扑结构的网络,即对输入图像并行地执行多个卷积运算或池化操作,并将所有输出结果拼接为一个非常深的特征图。

过拟合技术

过拟合是指为了得到一致假设而使假设变得过度严格。避免过拟合是分类器设计中的一个核心任务。通常采用增大数据量和测试样本集的方法对分类器性能进行评价。

fastText技术

Facebook开发的文本处理工具,是一个用于高效学习单词表示和句子分类的库。

word2vec技术

Word2vec,为一群用来产生词向量的相关模型。这些模型为浅而双层的神经网络,用来训练以重新建构语言学之词文本。网络以词表现,并且需猜测相邻位置的输入词,在word2vec中词袋模型假设下,词的顺序是不重要的。 训练完成之后,word2vec模型可用来映射每个词到一个向量,可用来表示词对词之间的关系。该向量为神经网络之隐藏层。 Word2vec依赖skip-grams或连续词袋(CBOW)来建立神经词嵌入。Word2vec为托马斯·米科洛夫(Tomas Mikolov)在Google带领的研究团队创造。该算法渐渐被其他人所分析和解释。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

模型选择技术

模型选择是从给定数据的一组候选模型中选择统计模型的任务。对于具有类似预测或解释力的候选模型,最简单的模型最有可能是最佳选择(奥卡姆剃刀)。

动量技术

优化器的一种,是模拟物理里动量的概念,其在相关方向可以加速SGD,抑制振荡,从而加快收敛

图像分类技术

图像分类,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法。它利用计算机对图像进行定量分析,把图像或图像中的每个像元或区域划归为若干个类别中的某一种,以代替人的视觉判读。

Jupyter技术

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。 Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等 。

语言模型技术

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

机器之心机构

机器之心,成立于2014年,是国内最具影响力、最专业、唯一用于国际品牌的人工智能信息服务与产业服务平台。目前机器之心已经建立起涵盖媒体、数据、活动、研究及咨询、线下物理空间于一体的业务体系,为各类人工智能从业者提供综合信息服务和产业服务。

https://www.jiqizhixin.com/
目标检测技术

一般目标检测(generic object detection)的目标是根据大量预定义的类别在自然图像中确定目标实例的位置,这是计算机视觉领域最基本和最有挑战性的问题之一。近些年兴起的深度学习技术是一种可从数据中直接学习特征表示的强大方法,并已经为一般目标检测领域带来了显著的突破性进展。

情感分类技术

情感分类是对带有感情色彩的主观性文本进行分析、推理的过程,即分析对说话人的态度,倾向正面,还是反面。

推荐文章
暂无评论
暂无评论~