欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[深度学习] tensorflow1.x和tensorflow2.x对比与总结

程序员文章站 2022-07-08 09:42:20
...

1. 主要区别有如下几点

Google于去年早些时候发布了TensorFlow 2.0,这是对现有TensorFlow 1.0的重大飞跃。

1.0. 易于使用(Ease of use)

[深度学习] tensorflow1.x和tensorflow2.x对比与总结
删除了许多旧库(例如tf.contrib),并对其中的一些库进行了合并。例如,在TensorFlow1.x中,可以使用Contrib,图层,Keras或估计器来建立模型,因此同一任务的许多选项使许多新用户感到困惑。 TensorFlow 2.0以后有了TensorFlow Keras和Estimator的扩展服务,这两个API的使用非常方便

1.1. 使用Eager模式(Eager Execution)

[深度学习] tensorflow1.x和tensorflow2.x对比与总结
在TensorFlow 1.x中。代码的编写分为两个部分:构建静态计算图和然后创建一个Session去执行它。这非常麻烦,尤其是如果在您设计的大型模型中,开始时存在某个小错误。TensorFlow2.0 Eager Execution默认情况下已实现,您不需要创建Session来运行静态计算图,你也不需要创建Session查看代码结果

1.2. 建立模型和部署变得容易(Model Building and deploying made easy)

[深度学习] tensorflow1.x和tensorflow2.x对比与总结

  1. 有了TensorFlow2.x提供高级TensorFlow Keras API,用户在创建模型时具有更大的灵活性。可以使用Keras功能或 sequential API定义模型。
  2. TensorFlow Estimator API允许您在本地主机或分布式多服务器环境上运行模型,而无需更改模型
  3. 计算图在性能方面很强大,在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): return tf.add(x, 1.)
scalar = tf.constant(1.0)
vector = tf.constant([1.0, 1.0])
matrix = tf.constant([[3.0]])
print(f(scalar))
print(f(vector))
print(f(matrix))

1.3. 简化了Data pipeline(The Data pipeline simplified)

[深度学习] tensorflow1.x和tensorflow2.x对比与总结

TensorFlow2.0有一个单独的模块TensorFlow DataSet,可用于以更优雅的方式与模型一起使用。它不仅具有大量现有数据集,还使您尝试使用新体系结构的工作变得更加容易-它还具有定义明确的方式向其中添加数据。

在用于构建模型的TensorFlow 1.x中,我们首先需要定义placeholder。这些是虚拟变量,这些变量稍后(在Session中)将用于向模型提供数据。有许多内置的API用于构建tf.contrib,tf.layers和tf.keras等层,也可以通过定义实际的数学运算来构建层。

使用TensorFlow 2.0可以像定义数学模块(tf.math)和线性代数(tf.linalg)模块那样构建定义自己的数学运算的模型。但是,您可以利用高级Keras API和tf.layers模块。重要的部分是我们不再需要定义placeholders

来源:https://medium.com/tensorflow/whats-coming-in-tensorflow-2-0-d3663832e9b8

1.4. 一些重要的点是:

[深度学习] tensorflow1.x和tensorflow2.x对比与总结

  • 使用data加载数据。使用tf.data创建的输入管道读取训练数据。
  • 使用TensorFlow数据集可获取各种各样的数据集以训练您的模型。
  • 使用keras构建,训练和验证模型,或使用Estimators API。
  • TensorFlow生态系统中的TensorFlow Hub包含大量预先训练的模型,使用标准接口,您可以从TensorFlow Hub导入任何模型,然后从头开始训练它,或者使用转移学习技术对其进行微调。
  • 使用eager execution 执行和调试,然后使用function获得图形的好处。
  • 使用分发策略进行分布式培训。对于大型ML训练任务,Distribution Strategy
    API使您可以轻松地在不同的硬件配置上分发和训练模型,而无需更改模型定义。您可以将训练负荷分配给一系列硬件加速器,例如CPU,GPU和TPU
  • 尽管此API支持多种集群配置,但是Template用于在本地或云环境中的Kubernetes集群上部署培训。
  • 导出到SavedModel。 TensorFlow将在SavedModel上标准化,作为TensorFlow
    Serving,TensorFlow Lite,TensorFlow.js,TensorFlow Hub等的交换格式。
  • 培训并保存模型后,您可以在应用程序中直接执行它,也可以使用以下部署库之一提供服务:TensorFlow服务:一个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-d3663832e9b8

2. 总结

一方面,Tensorflow 2.0并不新鲜。可能是因为即使在Tensorflow 1.0时代,几乎每个人都在使用keras!。 Keras现在是Tensorflow 2.0的核心,但是Tensorflow 2.0具有更多的功能,如上所述。

由Amita Kapoor博士贡献

3. tensorflow 2.x架构

[深度学习] tensorflow1.x和tensorflow2.x对比与总结

4. Tensorflow2.x—简化的模型开发流程

  1. 使用tf.data加载数据.
  2. 使用tf.keras构建模型,也可以使用premade estimator来验证模型;使用tensorflow hub进行迁移学习.
  3. 使用eager mode继续宁运行和调试(2.0默认开启,而1.3需手动打开)
  4. . 使用分发策略来进行分布式训练.
  5. 导出到SavedModel.
  6. 使用Tensorflow serve、Tensorflow Lite、Tensorflow.js部署模型.

5. Tensorflow2.x—强大的跨平台能力

  1. Tensorflow服务:直接使用HTTP/REST或GPRC/协议缓冲区
  2. Tensorflow Lite----可部署在Android\iOS和嵌入式系统上
  3. Tensorflow.js----在javascript中部署模型
  4. 其它语言:C, Java, Go, C#, Rust, R,…

6. Tensorflow2.x—强大的研究实验

  1. Keras功能的API和子类API,允许创建复杂的拓扑结构
  2. 自定义训练逻辑,使用tf.GradientTape和tf.custom_gradient进行更细粒度的控制
  3. 低层API自始至终可以与高层结合,完全的可定制
  4. 高级扩展:Ragged Tensors、Tensor2Tensor等

7. Tensorflow-keras与keras区别

  1. Tf.keras全面支持eager mode
  2. 只是用keras.Sequential和keras.Model时没影响
  3. 自定义Model内部运算逻辑的时候会有影响
  4. Tf低层可以使用keras的model.fit等抽象
  5. 适用于研究人员
  6. Tf.keras支持基于tf.data的模型训练
  7. Tf.keras支持TPU训练
  8. Tf.keras支持tf.distribution中的分布式策略
  9. 其它特性:tf.keras可以与tensorflow中的estimator集成;tf.keras可以保存为SavedModel

3.参考资料

[1] https://www.datasciencecentral.com/profiles/blogs/tensorflow-1-x-vs-2-x-summary-of-changes
[2] https://blog.csdn.net/qq_44776899/article/details/89948674
[3] https://medium.com/tensorflow/whats-coming-in-tensorflow-2-0-d3663832e9b8