计算机视觉实战:基于TensorFlow 2
上QQ阅读APP看书,第一时间看更新

2.4 TensorFlow生态系统

在主库之上,TensorFlow提供了许多对机器学习有用的工具。其中一些随TensorFlow一起提供,其他一些则归入TensorFlow扩展(TFX)和TensorFlow插件下。我们将介绍最常用的工具。

2.4.1 TensorBoard

虽然在本章第一个示例中使用的进度条显示了有用的信息,但我们可能想要访问更详细的图形。TensorFlow提供了一个强大的监控工具TensorBoard。默认情况下与TensorFlow一起安装,它也非常容易与Keras的回调结合使用:

在这段更新后的代码中,我们将TensorBoard回调传递给了model.fit()方法。默认情况下,TensorFlow会自动将损失和指标写入指定的文件夹。然后,我们可以从命令行启动TensorBoard:

此命令输出一个URL,打开该URL可以显示TensorBoard界面。在“Scalars”选项卡中,可以找到显示损失和准确率的图形(见图2-5)。

图2-5 在训练期间TensorBoard显示的两个图

正如我们将在本书中看到的,训练深度学习模型需要大量的微调。因此,监视模型的运行情况至关重要。TensorBoard可以让你精确地做到这一点。最常见的用例是监视模型损失随时间的演化。但是,也可以执行以下操作:

·绘制任意指标(例如准确率)曲线。

·显示输入和输出图像。

·显示执行时间。

·绘制模型的图表示。

TensorBoard用途广泛,有很多使用方法。每条信息都存储在一个tf.summary中,它可以是标量、图像、直方图或文本。例如,要记录标量,可能要首先创建摘要编写器,并使用以下命令记录信息:

在前面的代码中,我们指定了步长,它可以是轮号、批号,也可以是自定义信息。它将与TensorBoard图中的水平x轴相对应。TensorFlow还提供了生成汇总结果的工具。要手动记录准确率,可以使用以下方法:

其他指标也可用,例如均值、召回率、真正例(TruePositive),等等。虽然在TensorBoard中设置指标的日志记录看起来有些复杂且耗时,但它是TensorFlow工具包的必备工具。它可以节省大量的调试和手动日志记录时间。

2.4.2 TensorFlow插件和扩展

TensorFlow插件是收集在单个存储库(https://github.com/tensorflow/addons)中的一些额外功能的集合。它托管着一些深度学习的较新进展,这些进展太不稳定或没有被足够多的人使用,不足以将其添加到主TensorFlow库中。它还可以替代从TensorFlow 1中删除的tf.contrib。

TensorFlow扩展是TensorFlow的端到端机器学习平台。它提供了几个有用的工具:

·TensorFlow Data Validation(数据验证):用于探索和验证机器学习数据的库。它甚至可以在构建模型之前使用。

·TensorFlow Transform(数据转换):用于预处理数据的库。它可以确保以相同的方式处理训练和评估数据。

·TensorFlow Model Analysis(模型分析):用于评估TensorFlow模型的库。

·TensorFlow Serving(模型服务):用于机器学习模型的服务系统。服务是从模型传递预测的过程,通常通过REST API。

如图2-6所示,这些工具实现了端到端的目标,涵盖了构建和使用深度学习模型过程的每个步骤。

图2-6 创建和使用深度学习模型的端到端过程

2.4.3 TensorFlow Lite和TensorFlow.js

TensorFlow的主要版本是为Windows、Linux和Mac计算机设计的。要在其他设备上运行,必须使用不同版本的TensorFlow。TensorFlow Lite设计用于在手机和嵌入式设备上运行模型预测(推理)。它由将TensorFlow模型转换为所需的.tflite格式的转换器,以及可以安装在移动设备上以运行推理的解释器所组成。

最近,TensorFlow.js(也称为tfjs)的开发目的是使几乎所有的Web浏览器都能进行深度学习。它不需要用户进行任何安装,同时可以利用设备的GPU加速。我们将在第9章中详细描述TensorFlow Lite和TensorFlow.js的使用。

2.4.4 在何处运行模型

由于计算机视觉模型要处理大量数据,因此它们需要很长的时间来进行训练。因此,在本地计算机上进行训练可能会花费相当多的时间。你还将注意到,创建有效的模型需要大量的迭代。这两种见解将推动你决定在何处训练和运行模型。在本节中,我们将比较可用于训练和使用模型的不同选项。

在本地计算机上

在本地计算机上编码模型通常是最快的开始方式。由于可以访问熟悉的环境,因此可以根据需要轻松频繁地更改代码。但是,个人计算机(尤其是笔记本电脑)缺乏训练计算机视觉模型的计算能力。在GPU上训练可能比在CPU上快10~100倍。这就是推荐使用GPU的原因。

即使计算机集成了GPU,也只有非常特定的型号才能运行TensorFlow。GPU必须与NVIDIA的计算库CUDA兼容。在撰写本书时,最新版本的TensorFlow需要3.5或更高版本的CUDA计算能力。

有些笔记本电脑与外置GPU设备兼容,但这违反了便携式计算机的目的。相反,实用的方法是在具有GPU的远程计算机上运行模型。

在远程计算机上

现今,人们可以按小时租用具有GPU的强大计算机。定价各不相同,取决于GPU的能力和提供商。一台单GPU计算机的价格通常约为每小时1美元,而且价格每天都在下降。如果承诺租用计算机一个月,则可以获得良好的计算能力,大约每月只需100美元。考虑到你无须花费时间来等待模型训练,租用远程计算机通常是比较经济且明智的选择。

另一个选择是构建自己的深度学习服务器。请注意,这需要投资、组装,并且GPU要消耗大量电能。

一旦获得了对远程计算机的访问权限,便有了两种选择:

·在远程服务器上运行Jupyter Notebook。然后就可以使用浏览器在全球任何地方访问Jupyter Lab或Jupyter Notebook。这是进行深度学习的非常方便的方法。

·同步本地开发文件夹并远程运行代码。大多数IDE具有将本地代码与远程服务器同步的功能。这使你在享用功能强大的计算机的同时,也能在自己喜欢的IDE中编写代码。

基于Jupyter Notebook的Google Colab允许你免费在云中运行notebook。你甚至可以启用GPU模式。Colab的存储空间有限,并且连续运行时间不得超过8个小时。虽然它是入门或实验的完美工具,但是对于较大的模型来说它并不方便。

在Google Cloud上

要在远程计算机上运行TensorFlow,需要自己进行管理,包括安装正确的软件、确保它是最新的、打开和关闭服务器。虽然仍然可以在一台计算机上执行此类操作,但有时也需要将训练分布在多个GPU上。使用Google Cloud ML运行TensorFlow,可以让你专注于模型而不是此类操作。

Google Cloud ML可用于以下方面:

·借助云中的弹性资源,快速训练模型。

·使用并行化在短时间内寻找最佳模型参数。

·模型准备就绪后,无须运行自己的预测服务器即可提供预测。

有关打包、发送和运行模型的所有详细信息,请参见Google Cloud ML文档(https://cloud.google.com/ml-engine/docs/)。