TensorFlow 1.0与TensorFlow 2.0的更改概述
Google于今年早些时候发布了TensorFlow 2.0,这是对现有TensorFlow 1.0的重大飞跃。关键区别如下:
易于使用:删除了许多旧库(例如tf.contrib),并对其中的一些库进行了合并。例如,在TensorFlow1.x中,可以使用Contrib,图层,Keras或估算器来建立模型,因此同一任务的许多选项使许多新用户感到困惑。TensorFlow 2.0促进了TensorFlow Keras的模型实验和Estimators的扩展服务,这两个API的使用非常方便。
急切执行:在TensorFlow 1.x中。代码的编写分为两个部分:构建计算图和稍后创建一个会话以执行它。这非常麻烦,特别是如果在您设计的大型模型中,开始时存在某个小错误。TensorFlow2.0急切执行默认情况下已实现,即您不再需要创建会话来运行计算图,而无需创建Session即可直接查看代码的结果。
建立模型和部署变得容易: 借助TensorFlow2.0提供高级TensorFlow Keras API,用户在创建模型时具有更大的灵活性。可以使用Keras功能或顺序API定义模型。TensorFlow Estimator API允许您在本地主机或分布式多服务器环境上运行模型,而无需更改模型。计算图在性能方面非常强大,在TensorFlow 2.0中,您可以使用装饰器tf.function因此,以下功能块将作为单个图形运行。这是通过TensorFlow 2.0强大的Autograph功能完成的。这使用户可以优化功能并增加可移植性。最好的部分是您可以使用自然的Python语法编写函数。有效地,您可以使用装饰器tf.function将普通的Python代码转换为图形。装饰器@ tf.function紧随其后应用到功能块时,任何调用的功能通过它也将在图形模式下执行。因此,在TensorFlow 2.0中,用户应将其代码重构为较小的函数,并根据需要调用这些函数。通常,没有必要用tf.function装饰每个较小的功能;仅使用tf.function装饰高级计算-例如,训练的一个步骤或模型的前向传递。(源堆栈溢出和TF2文档)
为了扩展这个想法,在TensorFlow 1.x中,我们需要构建计算图。TensorFlow 2.0默认情况下不会构建图形。但是,正如每个机器学习工程师都知道的那样,图形对速度很有好处。TensorFlow 2.0为用户提供了使用python函数@ tf.function创建可调用图形的功能。tf.function()将为每个唯一的输入形状和数据类型集创建一个单独的图形。在下面的示例中,我们将创建三个单独的图形,每个输入数据类型一个。
@ tf.function
def f(x):返回tf.add(x,1.)
标量= tf.constant(1.0)
向量= tf.constant([1.0,1.0])
矩阵= tf.constant([[3.0]])
打印(f(标量))
打印(f(矢量))
打印(f(矩阵))
简化的数据管道:TensorFlow2.0有一个单独的模块TensorFlow DataSet,可用于以更优雅的方式与模型一起使用。它不仅具有大量现有数据集,还使您在尝试使用新架构时的工作变得更加轻松-它还具有定义明确的方式向其中添加数据。
在用于构建模型的TensorFlow 1.x中,我们首先需要声明占位符。这些是虚拟变量,这些变量稍后(在会话中)将用于向模型提供数据。有许多内置的API用于构建tf.contrib,tf.layers和tf.keras等层,也可以通过定义实际的数学运算来构建层。
与使用数学模块(tf.math)和线性代数(tf.linalg)模块之前一样,您可以使用TensorFlow 2.0建立定义自己的数学运算的模型。但是,您可以利用高级Keras API和tf.layers模块。重要的部分是我们不再需要定义占位符。
TensorFlow 2.0的简化概念图
TensorFlow 2.0的简化概念图如下所示
来源:https://medium.com/tensorflow/whats-coming-in-tensorflow-2-0-d36638 ...
一些要点是:
使用data加载 数据。使用使用tf.data创建的输入管道读取训练数据。
使用TensorFlow数据集可获取各种各样的数据集以训练您的模型。
使用keras构建,训练和验证模型 ,或使用 Estimators API。
TensorFlow生态系统中的TensorFlow Hub包含大量预先训练的模型,使用标准界面,您可以从TensorFlow Hub导入任何模型并从头开始训练它,或者使用转移学习技术对其进行微调。
渴望执行即可运行和调试 ,然后使用 function来获得图形的好处。
使用分发策略进行分布式培训。对于大型ML训练任务, Distribution Strategy API使您可以轻松地在不同的硬件配置上分发和训练模型,而无需更改模型定义。您可以将训练负载分配给一系列硬件加速器,例如CPU,GPU和TPU
尽管此API支持多种集群配置,但提供了 用于在本地 或云环境中的Kubernetes集群上部署培训的 模板。
导出到SavedModel。TensorFlow将在SavedModel上标准化,作为TensorFlow Serving,TensorFlow Lite,TensorFlow.js,TensorFlow Hub等的交换格式。
训练并保存模型后,您可以在应用程序中直接执行它,也可以使用以下部署库之一提供服务:TensorFlow Serving:一个TensorFlow库,允许通过HTTP / REST或gRPC / Protocol Buffers提供模型。TensorFlow Lite:TensorFlow的轻量级移动和嵌入式设备解决方案提供了在Android,iOS和Raspberry Pi和Edge TPU等嵌入式系统上部署模型的功能。js:允许在JavaScript环境中(例如,通过Node.js在Web浏览器或服务器端)部署模型。TensorFlow.js还支持使用JavaScript定义模型并使用类似Keras的API在Web浏览器中直接进行训练。
以上部分改编自https://medium.com/tensorflow/whats-coming-in-tensorflow-2-0-d36638 ...
观察结果
一方面,Tensorflow 2.0并不新鲜。可能是因为即使在Tensorflow 1.0时代,几乎每个人都在使用keras!。Keras现在是Tensorflow 2.0的核心,但是Tensorflow 2.0具有更多的功能,如上所述。
关注 CDA人工智能学院 ,回复“录播”获取更多人工智能精选直播视频!