[深度学习]tensorflow和keras(联系和区别2)

31 阅读5分钟

TensorFlow和Keras的关系可以概括为:

Keras是一个高级神经网络API,而TensorFlow是一个强大的开发平台。目前,Keras已经紧密集成到TensorFlow中,成为其官方推荐的高级API。

tensorflow是一个功能强大的开发平台, 其包括高级api和低级api, 高级api指的就是keras.

TensorFlow作为生态平台、Keras作为高级接口api,这样用户就能明白它们在现代工作流里各自扮演的角色了。

在最开始的时候, keras是独立的, 它可以运行在多个后端上(比如tensorflow, theano, cntk等后端),这些都断是通过计算引擎能力的.

tensorflow也有自己的原生的api, 叫做tensorflow api.

后来, tensorflow把keras纳入进来作为一个子模块, 作为tensorflow的核心的高级的api.

开发者可以使用tensorflow原生的api, 也可以使用tf.keras, 这就是一套系统, 两种写法.

随着市场的认可, tf.keras越来越受到大家的认可和欢迎, 这种写法成为了大家的首选的写法.

它们的关系发展大致可以分为三个阶段:

1. 独立与竞争时期(2015-2017)

  • Keras诞生:Keras由谷歌工程师François Chollet于2015年创建。它的核心理念是用户友好、模块化和可扩展。它允许用户用极少的代码快速构建和试验深度学习模型,后端计算引擎可以是TensorFlow、Theano或CNTK。
  • TensorFlow诞生:TensorFlow由谷歌大脑团队于2015年发布。它是一个符号式的、基于数据流图的数值计算库,功能极其强大和灵活,但相对底层,编写模型定义和训练循环的代码较为繁琐。
  • 关系:此时,Keras是一个可以运行在多个后端(包括TensorFlow)上的独立高级框架。开发者可以选择使用原生的、更灵活的TensorFlow API,或者使用更简洁的Keras API来调用TensorFlow作为后端。两者是松耦合的竞争/互补关系

2. 整合与融合时期(2017-2019)

  • 集成:由于Keras的简洁性广受欢迎,TensorFlow从1.4版本(2017年)开始,将Keras的核心API作为tf.keras子模块正式纳入TensorFlow。
  • 优势tf.keras与TensorFlow的其他特性(如数据集API、Estimator、TensorBoard)结合更紧密,性能有优化,并且得到了谷歌的官方支持。
  • 关系:形成了“一套系统,两种写法”的局面。开发者既可以用原生TensorFlow,也可以用集成的tf.kerastf.keras逐渐成为TensorFlow用户的首选高级API,而独立的Keras项目依然存在并维护。

3. 统一与新时代(2019年至今 - TensorFlow 2.x)

  • TensorFlow 2.0的革命:2019年,TensorFlow 2.0发布,这是一个根本性的转变。其核心设计原则是 “Eager Execution优先”和“Keras作为核心高级API”
  • 关系根本性变化
    1. 深度整合tf.keras成为了构建和训练模型的标准方式前端中心。很多其他TF组件都围绕它设计。
    2. 简化工作流:默认的急切执行模式使得开发和调试像使用NumPy一样直观,配合tf.keras,极大降低了入门和编码复杂度。
    3. 官方推荐:谷歌官方强烈推荐所有TensorFlow用户使用tf.keras。独立的Keras项目(多后端Keras)在2020年发布了最终版本2.4.0,并宣布停止更新,将未来完全交给tf.keras
  • 现状:可以说,Keras就是TensorFlow的接口标准。当我们今天在TensorFlow 2.x环境中谈论“使用Keras”时,默认指的就是tf.keras

核心关系比喻

  • 把构建深度学习模型比作造车
    • TensorFlow:是一个功能完整的汽车制造工厂,拥有生产发动机(底层计算)、底盘(数据流图)、螺丝(低级操作)的所有设备和流水线。
    • Keras (tf.keras, 集成高级api):是工厂里的智能汽车组装线。它提供了预制的、标准化的高级组件(如车门、座椅、方向盘, 发送机),并允许你通过简单的“搭积木”方式,快速、可靠地组装出一辆能跑的汽车(模型),而无需关心发动机是如何具体铸造的。
    • 原生低级API:相当于让你在工厂里从冶炼金属开始,亲手打造每一个零件。非常灵活,可以造出任何奇特形状的车辆,但效率极低,对工程师要求极高。

总结与建议

  • 对于初学者和绝大多数应用开发者直接学习并使用 tf.keras。它是TensorFlow 2.x的“正确打开方式”,能让你用最少的代码实现绝大多数想法,并且性能最佳。
  • 对于研究人员或需要极定制化模型的开发者:在tf.keras的基础上,可以混合使用TensorFlow的底层操作和自定义层,或者在需要时完全使用低级API。tf.keras具有良好的扩展性。
  • 历史项目:如果你看到2019年以前的旧代码或教程,需要注意区分它使用的是独立的Keras库还是tf.keras,因为两者在细节上可能有差异。对于新项目,请毫无疑虑地使用 tf.keras

简单来说,发展路径是:独立工具 → 被收购整合 → 成为产品的灵魂接口。今天,Keras的思想和API设计已经定义了如何使用TensorFlow进行建模。