博主有话说:首先感谢您阅读这篇博客!博主做大数据技术,平时喜欢阅读英文原版大数据技术书籍,并翻译成中文,分享出来。如要及时看到翻译的章节,请关注博主微信公众号 登峰大数据,微信号  bigdata_work 

好书快翻--《Python深度学习第二版》第三章 Keras和TensorFlow简介

本章包括:

  • 详解TensorFlow、Keras和它们之间的关系

  • 建立一个深度学习的工作空间

  • 核心深度学习概念如何转化为Keras和TensorFlow的概述

这一章的目的是给出在实践使用深度学习的一切相关知识。我们将快速介绍Keras (Keras .io)和TensorFlow (TensorFlow .org),这两个基于python的深度学习工具将贯穿全书。你会学习如何建立一个深入学习的工作空间,有TensorFlow, Keras,和GPU的支持。最后,在第2章中,与Keras和TensorFlow的第一次接触的基础上,我们将回顾神经网络的核心组件以及它们如何转化为Keras和TensorFlow api。

在本章结束时,您将准备好转向实际的、真实的应用程序—从第4章开始。

3.1 TensorFlow是什么?

TensorFlow是一个基于python的免费开源机器学习平台,主要由谷歌开发。与NumPy非常相似,TensorFlow的主要目的是使工程师和研究人员能够在数值张量上操作数学表达式。但是TensorFlow在以下几个方面远远超出了NumPy的范围:

  • 它可以自动计算任何可微分表达式的梯度(正如您在第2章中看到的),这使得它非常适合于机器学习。

  • 它不仅可以在CPU上运行,还可以在gpu和TPUs上运行,这是一种高度并行的硬件加速器。

  • TensorFlow中定义的计算可以很容易地分布在许多机器上。

  • TensorFlow程序可以导出到其他运行时环境,如c++、JavaScript(用于基于浏览器的应用程序)或TFLite(用于在移动设备或嵌入式设备上运行的应用程序)等。这使得TensorFlow应用程序易于在实际环境中部署。

一定要记住TensorFlow不仅仅是一个库(library)。它还是一个平台,拥有一个庞大的组件生态系统,有些是由谷歌开发的,有些是由第三方开发的。例如,有用于强化学习研究的TF-Agents,用于工业强度的机器学习工作流管理的TFX,用于生产部署的TF-Serving,有用于预训练模型的TF-Hub存储库……这些组件一起涵盖了非常广泛的场景,从前沿研究到大规模生产应用程序。

TensorFlow的计算能力相当强:例如,橡树岭国家实验室(Oak Ridge National Lab)的科学家利用它在IBM Summit超级计算机的27,000个gpu上训练了一个1.1 ExaFLOP的极端天气预报模型。同样地,谷歌使用TensorFlow开发了非常计算密集型的深度学习应用程序,比如国际象棋和围棋代理AlphaZero。对于您自己的模型,如果您有预算,您可以实际地在一个小的TPU Pod或租用在谷歌云或AWS上的一个大的gpu集群上扩展到大约10petaflops(每秒千万亿次浮点运算)。到2019年,这仍将是顶级超级计算机峰值计算能力的1%左右!

3.2 Keras是什么?

Keras是一个基于TensorFlow的Python深度学习API,它提供了一种方便的方式来定义和训练任何类型的深度学习模型。Keras最初是为了研究而开发的,目的是实现快速深度学习实验。

通过TensorFlow, Keras可以在不同类型的硬件(见图1)上运行——GPU、TPU或普通CPU——并且可以无缝地扩展到数千台机器上。

图3.1 Keras和TensorFlow: TensorFlow是一个底层张量计算平台,Keras是一个高级深度学习API

好书快翻--《Python深度学习第二版》第三章 Keras和TensorFlow简介

Keras以优先考虑开发人员体验而闻名。它是针对人类的API,而不是针对机器的。它遵循了减少认知负荷的最佳实践:它提供了一致和简单的工作流,最小化了通用用例所需的操作数量,并且在用户出错时提供了清晰和可操作的反馈。这使得Keras作为一个初学者很容易学习,作为一个专家使用起来也很高效的API。

截至2019年底,Keras拥有超过37万名用户,其中包括学术研究人员、工程师、初创公司和大公司的数据科学家,以及研究生和业余爱好者。Keras被用于谷歌、Netflix、Uber、CERN、NASA、Yelp、Instacart、Square,以及成百上千的初创公司,这些公司在每个行业都在解决各种各样的问题。Keras也是Kaggle(机器学习竞赛网站)上一个流行的框架,在该网站上,大多数深度学习竞赛都是使用Keras模型获胜的。

因为Keras有一个庞大而多样化的用户群,它并不会强迫你遵循单一的方法来建立和训练模型。相反,它支持各种不同的工作流,从非常高的层次到非常低的层次,对应于不同的用户配置文件。例如,可以有一组方法来构建模型,也有一组方法来训练它们,每一种方法都代表了可用性和灵活性之间的某种平衡。在第5章中,我们将详细地回顾这一系列工作流中的一部分。您可以像使用Scikit-Learn一样使用Keras—只需调用fit()并让框架完成它的工作—或者您可以像使用NumPy一样使用它—完全控制每一个小细节。

这意味着一旦你成为了一名专家,你现在开始学习的所有东西仍然是相关的。您可以很容易地开始,然后逐渐深入到工作流程中,在那里您可以从零开始编写越来越多的逻辑。当你从学生变成研究人员,或者从数据科学家变成深度学习工程师时,你不必切换到一个完全不同的框架。

这种哲学与Python本身的哲学没有什么不同!有些语言只提供一种编写程序的方法——例如,面向对象编程或函数式编程。与此同时,Python是一种多范式语言:它提供了一组可能的使用模式,这些模式可以很好地协同工作。这使得Python适合于各种非常不同的场景:系统管理、数据科学、机器学习工程、web开发……或者只是学习如何编程。同样,您可以将Keras看作是深度学习的Python:一种用户友好的深度学习语言,为不同的用户配置文件提供各种工作流。

3.3 Keras和TensorFlow:简史

Keras比TensorFlow早8个月。它在2015年3月发布,而TensorFlow在2015年11月发布。您可能会问,如果Keras是构建在TensorFlow之上的,那么在TensorFlow发布之前,它是如何存在的呢?Keras最初是建立在Theano之上的,Theano是另一个提供自动微分和GPU支持的张量操作库——这是同类库中最早的一个。由蒙特利尔大学蒙特利尔学习算法研究所(MILA)开发的Theano在很多方面都是TensorFlow的先驱。它首创了使用静态计算图形进行自动区分,并将代码编译到CPU和GPU的想法。

2015年末,在TensorFlow发布之后,Keras被重构为一个多后端架构:Keras可以与Theano或TensorFlow一起使用,在两者之间进行切换就像更改环境变量一样简单。到2016年9月,TensorFlow已经达到了技术成熟的水平,可以将其作为Keras的默认后端选项。2017年,Keras增加了两个新的后端选项:CNTK(由微软开发)和MXNet(由亚马逊开发)。如今,Theano和CNTK都处于开发阶段,而MXNet在亚马逊之外并没有被广泛使用。Keras又回到了TensorFlow之上的单一后端API。

Keras和TensorFlow多年来一直保持着共生关系。在2016年和2017年,Keras以开发TensorFlow应用程序的用户友好方式而闻名,它将新用户引入了TensorFlow生态系统。到2017年底,大多数TensorFlow用户通过Keras或与Keras结合使用。在2018年,TensorFlow的领导层选择了Keras作为TensorFlow的官方高级API。因此,Keras API在TensorFlow 2.0中处于前沿和中心位置,该2.0于2019年9月发布——对TensorFlow和Keras进行了广泛的重新设计,考虑了四年多的用户反馈和技术进步。

至此,您必须开始在实践中运行Keras和TensorFlow代码。让我们开始吧。

3.4建立深度学习工作空间

在开始开发深度学习应用程序之前,需要设置开发环境。强烈建议您在现代的NVIDIA GPU上而不是在计算机的CPU上运行深度学习代码,尽管这并不是必须的。一些应用程序——特别是使用卷积网络的图像处理——在CPU上的速度会慢得令人难以忍受,甚至是一个快速的多核CPU。甚至对于可以在CPU上实际运行的应用程序,使用最新的GPU通常也可以将速度提高1 、 5或10倍。

要在GPU上进行深度学习,你有三个选择:

  • 购买并安装物理NVIDIA GPU在您的工作站上。

  • 在谷歌云平台或AWS EC2上使用GPU实例。

  • 使用来自Colaboratory的免费GPU运行环境,这是谷歌提供的托管notebook服务(有关“notebook”的详细信息,请参阅下一节)。

Colaboratory是入门学习时可使用的最简单的方法,因为它不需要购买硬件,也不需要安装软件—只需在浏览器中打开一个选项卡并开始编码。这是我们推荐用于运行本书中的代码示例的选项。然而,Colaboratory的免费版本只适用于小工作量。如果你想扩大规模,你将不得不使用第一或第二种选择。

如果你还没有可以用于深度学习的GPU(最新的高端NVIDIA GPU),那么在云上运行深度学习实验是一种简单、低成本的方式,因为你可以转移到更大的工作负载上,而不需要购买任何额外的硬件。如果您正在使用Jupyter notebooks进行开发,在云中运行的体验与在本地运行没有什么不同。

但是,如果你是深度学习的重度使用者,这种设置从长期来看是不可持续的。云环境并不便宜:到2019年底,在谷歌云上使用P100GPU,需要支付每小时1.46美元。与此同时,一个可靠的消费级GPU将花费你大约1500到2500美元,这是一个相当稳定的价格,即使这些GPU的规格在不断改进。如果您经常使用深度学习,可以考虑使用一个或多个gpu设置一个本地工作站。

另外,无论您是在本地运行还是在云中运行,最好使用Unix工作站。虽然在Windows上使用Keras在技术上是可行的,但我们不建议这样做。如果你是一个Windows用户,你想在自己的工作站上进行深度学习,让一切运行起来的最简单的解决方案是在你的机器上设置一个Ubuntu双启动。这可能看起来很麻烦,但从长远来看,使用Ubuntu会节省你很多时间和避免很多麻烦。