TensorFlow深度学习实战(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-12 16:41:51

点击下载

作者:(波)安东尼奥·古利(Antonio Gulli)

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

TensorFlow深度学习实战

TensorFlow深度学习实战试读:

前言

本书介绍如何有效地使用Google的开源框架TensorFlow进行深度学习。你将实现不同的深度学习网络,如卷积神经网络(CNN)、循环神经网络(RNN)、深度Q learning网络(DQN)和生成对抗网络(GAN),并将学习如何使用TensorFlow的高级封装工具Keras。

你将了解如何使用不同的深层神经架构来执行复杂的任务,并在一些常用数据集(如MNIST、CIFAR-10、Youtube8m等)上了解不同DNN的性能,不仅可以了解TensorFlow支持的不同移动和嵌入式平台,还可以了解如何为深度学习应用程序搭建云平台。你将深入了解TPU架构,以及它们将如何影响DNN的未来。

学完本书,你将理解深度学习实践技术,能够独立开发现实世界中的一些应用,开展如强化学习、GAN、自动编码机等领域的研究。本书主要内容

第1章 讨论Google的开源框架TensorFlow,以及为什么它对深度学习有用。这一章将讨论如何在Mac、Windows和Ubuntu上为CPU和GPU安装TensorFlow,还将讨论在整本书中使用的其他Python包。我们将解释TensorFlow代码的两个组成部分、图的定义及其执行,学习使用TensorBoard来查看图表结构,了解TensorFlow常量、变量和占位符之间的区别,也会体验一下TensorFlow Estimator。

第2章 讨论回归及其应用。这一章将讨论回归中涉及的概念,了解它与聚类和分类有何不同,学习不同类型的损失函数,以及如何在TensorFlow中实现它们。我们将学习如何实现L1和L2正则化,并讨论梯度下降算法,学习如何优化它并在TensorFlow中实现它,还将简要介绍一下交叉熵函数及其实现。

第3章 涵盖人工神经网络基础知识,并解释为什么它可以完成DNN所要求的任务,还将学习如何选择不同的激活函数,使用它们来构建一个简单的感知机,并将其用于函数建模。在训练数据之前有必要了解数据的正则化,并将学习逐层构建多层感知机(MLP)。

第4章 讨论卷积过程以及如何提取特征,将学习CNN的三个重要的层:卷积层、池化层和全连接层。我们也将学习dropout正则化,以及为何其能提高性能,并学习不同的CNN架构,如LeNET和GoogleNET。

第5章 涵盖诸如面部识别CNN的一些成功案例。我们将写一个使用CNN进行情感分析的程序,并学习如何实现迁移学习。还将学习如何使用VGG16网络进行迁移学习,并用VGGNet、ResNet、Inception和Xception来学习图像的分类。我们将使用扩张ConvNet、Wavenet和Nsynth来生成一段音乐,还将学习如何做视觉问答、如何做视频分类。

第6章 将介绍RNN的基本单元、单词嵌入和时间排序。我们将简要讨论LSTM网络,并学习seq2seq RNN,还学习如何使用RNN进行机器翻译、生成文本和预测未来值。

第7章 主要介绍无监督学习范式。我们将学习聚类和降维,学习像主成分分析(PCA)这样的技术,并了解它们如何用于降维。我们将学习均值聚类,了解地形图的概念,并学习如何训练自组织映射网络。我们将学习受限玻尔兹曼机(RBM),并讨论其架构和训练机制。我们将学习如何堆叠RBM来构建深度置信网络(DBN),并学习如何训练它们。我们还将使用预训练和微调情绪检测的概念来训练DBN。

第8章 将揭开自动编码机的神秘面纱。我们将学习自动编码机及其应用程序,讨论各种可以使用自动编码机的真实案例,讨论编码和后续重建的过程,学习重建错误,学习稀疏自动编码机、KL散度的概念,学习去噪自动编码机,并使用它们来根据被噪声污染的图像重建纯净的图像。我们将学习如何构建卷积自动编码机和堆叠自动编码机。

第9章 涵盖不同的强化学习算法。我们将学习Q learning算法、讨论Bellman-Ford方程,以及如何选择学习率、折扣因子,还将学习如何使用OpenAI Gym框架。我们将学习经验回放和缓存的概念来实现价值迭代Q网络,使用Q learning和策略梯度来构建游戏agent。最后,我们将学习如何创建自己的DQN,简要介绍AlphaGo Zero及其取得的胜利。

第10章 将介绍移动端深度学习的不同应用。我们将在Windows平台上学习如何在Android studio上使用TensorFlow,学习如何使用TensorFlow和XCode来制作基于ios的应用程序,学习如何优化移动端的TensorFlow计算图,以及学习如何为移动设备转换TensorFlow计算图。

第11章 从生成对抗网络开始,首先探索不同的预测模型。我们将阐述GAN及其运行背后的动机,了解基本的GAN架构,并探索一些非常酷的GAN应用。我们将学习另一个生成网络——变分自动编码机。最后,我们将了解最近提出的胶囊网络。

第12章 解释云环境、Docker、容器的概念,以及如何使用它们,学习如何使用多个CPU或多个服务器运行分布式TensorFlow,学习如何设置AWS进行深度学习,学习如何为深度学习应用设置谷歌云,学习如何为深度学习应用设置Microsoft Azure云。我们还将了解其他可用的云服务。

附录A 简要介绍AutoML和孪生网络。

附录B 包括张量处理单元和它的基本架构,以及它将如何影响DNN的未来。阅读本书前的准备工作

为更好地学习本书,你需要安装Python 3.5版本(https://www.continuum.io/downloads)以及TensorFlow(www.tensorflow.org)。建议使用以下硬件配置:

·CPU架构:x86_64

·系统内存:8GB~32GB

·CPU:4~8核

·GPU:可选,最低NVDIA GTX 650本书读者对象

本书主要面向想要定期执行机器学习任务的数据科学家、机器学习从业者和深度学习爱好者。对深度神经网络已有了解并希望获得CNN和RNN等方面实践经验的人会发现本书很有用。本书结构

在这本书中,你会发现几个频繁出现的小标题(准备工作、具体做法、解读分析、更多内容、拓展阅读),具体含义如下。

准备工作

这部分主要介绍需要做什么,并介绍如何安装所需的软件并进行初步设置。

具体做法

这部分包括实现相应功能的具体步骤。

解读分析

这部分通常包含对具体步骤的详细解释。

更多内容

这部分是扩充知识,以使读者对其有更多的了解。

拓展阅读

这部分将列出一些相关的网址。下载示例代码

本书的示例代码,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。作者简介

Antonio Gulli是企业领导和软件部门高管,具备创新精神和执行力,并乐于发现和管理全球高科技人才。他是搜索引擎、在线服务、机器学习、信息检索、数据分析以及云计算等方面的专家。他已经在欧洲四个国家获得了从业经验,并管理过欧美六个国家的有关团队。目前,他在谷歌华沙担任网站主管和云计算主管,推动Serverless、Kubernetes和Google Cloud UX等项目在欧洲的发展。以前,Antonio曾作为全球领先出版商Elsevier的副总裁帮助创新学术搜索任务,而在此之前,他曾作为微软的首席工程师开展查询建议和新闻搜索项目。他还曾担任Ask.com的首席技术官,推动多媒体和新闻搜索技术的发展。Antonio已经申请了20多项专利,发表了多篇学术论文,并是多个国际会议的高级PC成员。他相信,要想成功必须把管理、研究技巧、执行力和销售态度统一起来。

感谢每位读者对本书的关注和信任。在LinkedIn和Facebook上收到的评论数量让我感到诚惶诚恐:每一位读者都为本书的改进提供了巨大的帮助。也要感谢以下各位在写作过程中给予的支持:Susana、Ewa、Ignacy、Dawid、Max、Jarek、Jerzy、Nina、Laura、Antonella、Eric、Ettore、Francesco、Liubov、Marco、Fabio、Giacomo、Saskia、Christina、Wieland和Yossi。非常感谢我的合作者Amita,以及她的宝贵意见和建议。特别感谢本书的审校者Eric Brewer、Corrado Zoccolo和Sujit Pal审校了整本书的内容。特别感谢我的经理Eyal在写作过程中对我的支持与信任。Charlotte Menora(http://bistrocharlotte.pl/)是位于华沙的一家酒吧,工作之余我在那里写作了本书的部分章节。这是一个鼓舞人心的地方,如果你访问波兰,一定不要错过华沙这个现代化的酷炫城市。最后,非常感谢Packt的整个编辑团队,尤其是Tushar Gupta和Tejas Limkar的支持以及不断的督促和提醒。感谢你们的耐心。

Amita Kapoor是印度德里大学电子学系副教授。她在过去的20年里一直在教授神经网络课程。她于1996年取得电子学硕士学位,并于2011年获得博士学位。在攻读博士学位期间,她获得了著名的DAAD奖学金,这笔奖金资助了她在德国卡尔斯鲁厄理工学院的部分研究工作。她曾获得2008年度国际光电子大会颁发的最佳演讲奖。她是OSA(美国光学学会)、IEEE(美国电气和电子工程师协会)、INNS(国际神经网络协会)和ISBS(印度佛学研究协会)等专业机构的成员。Amita在国际期刊和会议上发表了40多篇文章。她最近的研究领域包括机器学习、人工智能、神经网络、机器人学、佛学(偏心理学和哲学)以及AI伦理学。

我试图在这本书中总结我在深度神经网络领域学到的知识。我以一种让读者容易理解和运用的方式呈现,所以本书的主要动力来自于你——读者。感谢这本书的每一位读者,是你们激励着我不断前行,尤其是在我懒惰的时候。我还要感谢加尔各答大学的Parongama Sen教授在1994年向我介绍了这个主题,还有我的朋友Nirjara Jain和Shubha Swaminathan在大学图书馆里与我讨论阿西莫夫、他的故事以及未来神经网络将改变社会的预见。非常感谢我的合作者Antonio Guili的宝贵意见,以及本书的审校者Narotam Singh和Nick McClure对全书内容精心审阅并重新检查代码。最后,非常感谢Packt的整个编辑团队,尤其是Tushar Gupta和Tejas Limkar的支持以及不断的督促和提醒。审校者简介

Narotam Singh自1996年以来一直在印度地球科学部气象部门工作。他一直积极参与GoI在信息技术和通信领域的各种技术项目及培训。他于1996年毕业于电子学专业,并分别于1994年及1997年获得计算机工程学士和硕士学位。他目前正在从事神经网络、机器学习和深度学习等领域的研究工作。

Nick McClure目前是美国华盛顿州西雅图PayScale公司的高级数据科学家。此前,他曾任职于Zillow及Caesar’s Entertainment公司。分别在蒙大拿大学、圣本笃学院和圣约翰大学攻读应用数学学位。Nick还撰写了由Packt出版公司出版的《TensorFlow Machine Learning Cookbook》。

他热衷于学习,并在分析、机器学习和人工智能领域颇有建树。Nick经常会把一些想法放在自己的博客fromdata.org或者Twitter账号@nfmcclure上。

Corrado Zoccolo是Google的高级软件工程师,在分布式索引和信息检索系统方面拥有超过10年的从业经验。

我想感谢许多帮助我的人,特别是:我的妻子Ermelinda,多年来一直支持我致力于计算机科学研究;Marco Vanneschi教授,向我介绍美丽的分布式系统世界;我在Google的第一任经理Peter Dickman,他让我走上了正确的职业生涯,我每天都在和同事们一起学习。  第1章 TensorFlow简介

任何曾经试图在Python中只利用NumPy编写神经网络代码的人都知道那是多么麻烦。编写一个简单的一层前馈网络的代码尚且需要40多行代码,当增加层数时,编写代码将会更加困难,执行时间也会更长。

TensorFlow使这一切变得更加简单快捷,从而缩短了想法到部署之间的实现时间。在本书中,你将学习如何利用TensorFlow的功能来实现深度神经网络。1.1 引言

TensorFlow是由Google Brain团队为深度神经网络(DNN)开发的功能强大的开源软件库,于2015年11月首次发布,在Apache 2.x协议许可下可用。截至今天,短短的两年内,其GitHub库(https://github.com/tensorflow/tensorflow)大约845个贡献者共提交超过17000次,这本身就是衡量TensorFlow流行度和性能的一个指标。下图列出了当前流行的深度学习框架,从中能够清楚地看到TensorFlow的领先地位。

该图基于2017年7月12日GitHub库的数据;每个气泡都有一个注释(包括框架、贡献者)。

先来了解一下TensorFlow究竟是什么,以及它为什么在DNN研究人员和工程师中如此受欢迎。开源深度学习库TensorFlow允许将深度神经网络的计算部署到任意数量的CPU或GPU的服务器、PC或移动设备上,且只利用一个TensorFlow API。你可能会问,还有很多其他的深度学习库,如Torch、Theano、Caffe和MxNet,那TensorFlow与其他深度学习库的区别在哪里呢?包括TensorFlow在内的大多数深度学习库能够自动求导、开源、支持多种CPU/GPU、拥有预训练模型,并支持常用的NN架构,如递归神经网络(RNN)、卷积神经网络(CNN)和深度置信网络(DBN)。TensorFlow则还有更多的特点,如下:

·支持所有流行语言,如Python、C++、Java、R和Go。

·可以在多种平台上工作,甚至是移动平台和分布式平台。

·它受到所有云服务(AWS、Google和Azure)的支持。

·Keras——高级神经网络API,已经与TensorFlow整合。

·与Torch/Theano比较,TensorFlow拥有更好的计算图表可视化。

·允许模型部署到工业生产中,并且容易使用。

·有非常好的社区支持。

·TensorFlow不仅仅是一个软件库,它是一套包括TensorFlow,TensorBoard和TensorServing的软件。

谷歌research博客(https://research.googleblog.com/2016/11/celebrating-tensorflows-first-year-html)列出了全球一些使用TensorFlow开发的有趣项目:

·Google翻译运用了TensorFlow和TPU(Tensor Processing Units)。

·Project Magenta能够使用强化学习模型生成音乐,运用了TensorFlow。

·澳大利亚海洋生物学家使用了TensorFlow来发现和理解濒临灭绝的海牛。

·一位日本农民运用TensorFlow开发了一个应用程序,使用大小和形状等物理特性对黄瓜进行分类。

使用TensorFlow的项目还有很多。本书旨在让读者理解TensorFlow在深度学习模型中的应用,使读者可以轻松地将模型用于数据集并开发有用的应用程序。每章包含一系列处理技术问题、依赖性、代码和解读的示例,在每章的最后,还有一个功能完善的深度学习模型。1.2 TensorFlow安装

本节将介绍在不同的操作系统(Linux、Mac和Windows)上如何全新安装TensorFlow 1.3。首先了解安装TensorFlow的必要要求,TensorFlow可以在Ubuntu和macOS上基于native pip、Anaconda、virtualenv和Docker进行安装,对于Windows操作系统,可以使用native pip或Anaconda。

Anaconda适用于这三种操作系统,安装简单,在同一个系统上维护不同的项目环境也很方便,因此本书将基于Anaconda安装TensorFlow。有关Anaconda及其环境管理的更多详细信息,请参考https://conda.io/docs/user-guide/index.html。

本书中的代码已经在以下平台上进行了测试:

·Windows 10,Anaconda 3,Python 3.5,TensorFlow GPU,CUDA toolkit 8.0,cuDNN v5.1,NVDIA GTX 1070

·Windows 10/Ubuntu 14.04/Ubuntu 16.04/macOS Sierra,Anaconda 3,Python 3.5,TensorFlow(CPU)准备工作

TensorFlow安装的前提是系统安装了Python 2.5或更高版本,书中的例子是以Python 3.5(Anaconda 3版)为基础设计的。为了安装TensorFlow,首先确保你已经安装了Anaconda。可以从网址(https://www.continuum.io/downloads)中下载并安装适用于Windows/macOS或Linux的Anaconda。

安装完成后,可以在窗口中使用以下命令进行安装验证:

安装了Anaconda,下一步决定是否安装TensorFlow CPU版本或GPU版本。几乎所有计算机都支持TensorFlow CPU版本,而GPU版本则要求计算机有一个CUDA compute capability 3.0及以上的NVDIA GPU显卡(对于台式机而言最低配置为NVDIA GTX 650)。CPU与GPU的对比:中央处理器(CPU)由对顺序串行处理优化的内核(4~8个)组成。图形处理器(GPU)具有大规模并行架构,由数千个更小且更有效的核芯(大致以千计)组成,能够同时处理多个任务。

对于TensorFlow GPU版本,需要先安装CUDA toolkit 7.0及以上版本、NVDIA【R】驱动程序和cuDNN v3或以上版本。Windows系统还另外需要一些DLL文件,读者可以下载所需的DLL文件或安装Visual Studio C++。还有一件事要记住,cuDNN文件需安装在不同的目录中,并需要确保目录在系统路径中。当然也可以将CUDA库中的相关文件复制到相应的文件夹中。具体做法

1.在命令行中使用以下命令创建conda环境(如果使用Windows,最好在命令行中以管理员身份执行):

2.激活conda环境:

3.该命令应提示:

4.根据要在conda环境中安装的TensorFlow版本,输入以下命令:

5.在命令行中输入python。

6.输入以下代码:

7.输出如下:

8.在命令行中禁用conda环境(Windows调用deactivate命令,MAC/Ubuntu调用source deactivate命令)。解读分析

Google使用wheel标准分发TensorFlow,它是.whl后缀的ZIP格式文件。Python 3.6是Anaconda 3默认的Python版本,且没有已安装的wheel。在编写本书时,Python 3.6支持的wheel仅针对Linux/Ubuntu,因此,在创建TensorFlow环境时,这里指定Python 3.5。接着新建conda环境,命名为tensorflow,并安装pip,python,wheel及其他软件包。

conda环境创建后,调用source activate/activate命令激活环境。在激活的环境中,使用pip install命令安装所需的TensorFlow(从相应的TensorFlow-API URL下载)。尽管有利用conda forge安装TensorFlow CPU的Anaconda命令,但TensorFlow推荐使用pip install。在conda环境中安装TensorFlow后,就可以禁用了。现在可以执行第一个TensorFlow程序了。

程序运行时,可能会看到一些警告(W)消息和提示(I)消息,最后是输出代码:

恭喜你已成功安装并执行了第一个TensorFlow代码,在下一节中更深入地通读代码。拓展阅读

另外,你也可以安装Jupyter notebook:

1.安装python:

2.安装nb_conda_kernels:

3.启动Jupyter notebook:这将会打开一个新的浏览器窗口。

如果已安装了TensorFlow,则可以调用pip install--upgrade tensorflow进行升级。1.3 Hello world

在任何计算机语言中学习的第一个程序是都是Hello world,本书中也将遵守这个惯例,从程序Hello world开始。上一节进行TensorFlow安装验证的代码如下:

下面一起看一下这段简单的代码。具体做法

1.导入tensorflow,这将导入TensorFlow库,并允许使用其精彩的功能。

2.由于要打印的信息是一个常量字符串,因此使用tf.constant:

3.为了执行计算图,利用with语句定义Session,并使用run来运行:

4.输出中包含一系列警告消息(W),具体取决于所使用的计算机和操作系统,并声明如果针对所使用的计算机进行编译,代码运行速度可能会更快:

5.如果使用TensorFlow GPU版本,则还会获得一系列介绍设备的提示消息(I):

6.最后是在会话中打印的信息:解读分析

前面的代码分为三个主要部分。第一部分import模块包含代码将使用的所有库,在目前的代码中只使用TensorFlow,其中语句import tensorflow as tf则允许Python访问TensorFlow所有的类、方法和符号。第二个模块包含图形定义部分,在这里,创建想要的计算图。在本例中计算图只有一个节点,tensor常量消息由字符串“Welcome to the exciting world of Deep Neural Networks”构成。第三个模块是通过会话执行计算图,这部分使用with关键字创建了会话,最后在会话中执行以上计算图。

现在来解读输出。收到的警告消息提醒TensorFlow代码可以以更快的速度运行,这能够通过从source安装TensorFlow来实现(本章后面的章节中会提及)。收到的提示消息给出计算设备的信息。这两个消息都是无害的,如果不想看到它们,可以通过以下两行代码实现:

以上代码用于忽略级别2及以下的消息(级别1是提示,级别2是警告,级别3是错误)。

该程序打印计算图执行的结果,计算图的执行则使用sess.run()语句,sess.run求取message中所定义的tensor值;计算图执行结果输入到print函数,并使用decode方法改进,print函数向stdout输出结果:

这里的输出结果是一个字节字符串。要删除字符串引号和“b”(表示字节,byte)只保留单引号内的内容,可以使用decode()方法。1.4 理解TensorFlow程序结构

TensorFlow与其他编程语言非常不同。首先通过将程序分为两个独立的部分,构建任何拟创建神经网络的蓝图,包括计算图的定义及其执行。起初这对于传统程序员来说看起来很麻烦,但是正是图定义和执行的分开设计让TensorFlow能够多平台工作以及并行执行,TensorFlow也因此更加强大。

计算图:计算图是包含节点和边的网络。本节定义所有要使用的数据,也就是张量(tensor)对象(常量、变量和占位符),同时定义要执行的所有计算,即运算操作对象(Operation Object,简称OP)。每个节点可以有零个或多个输入,但只有一个输出。网络中的节点表示对象(张量和运算操作),边表示运算操作之间流动的张量。计算图定义神经网络的蓝图,但其中的张量还没有相关的数值。

为了构建计算图,需要定义所有要执行的常量、变量和运算操作。常量、变量和占位符将在下一节中介绍,数学运算操作将在矩阵运算章节中详细讨论。本节将用一个简单的例子描述程序结构,例子中,通过定义并执行计算图来实现两个向量相加。

计算图的执行:使用会话对象来实现计算图的执行。会话对象封装了评估张量和操作对象的环境。这里真正实现了运算操作并将信息从网络的一层传递到另外一层。不同张量对象的值仅在会话对象中被初始化、访问和保存。在此之前张量对象只被抽象定义,在会话中才被赋予实际的意义。具体做法

通过以下步骤定义一个计算图:

1.在此以两个向量相加为例给出计算图。假设有两个向量v_1和v_2将作为输入提供给Add操作。建立的计算图如下:

2.定义该图的相应代码如下所示:

3.然后在会话中执行这个图:

以上两行相当于下面的代码。上面的代码的优点是不必显式写出关闭会话的命令。

4.运行结果是显示两个向量的和:请记住,每个会话都需要使用close()来明确关闭,而with格式可以在运行结束时隐式关闭会话。解读分析

计算图的构建非常简单。添加变量和操作,并按照逐层建立神经网络的顺序传递它们(让张量流动)。TensorFlow还允许使用with tf.device()命令来使用具有不同计算图形对象的特定设备(CPU/

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载