为什么 Keras 需要 TensorFlow 引擎?我没有得到关于我们为什么需要 Keras 的正确方向。我们可以使用 TensorFlow 构建神经网络模型,但为什么大多数人使用 Keras 和 TensorFlow 作为后端?
为什么 Keras 需要 TensorFlow 作为后端?
在其历史背景下理解时,这更有意义。这些是按时间顺序排列的事件:
April 2009
Theano 0.1 发布。它将主导深度学习框架领域多年。June 2015
Keras由François Chollet创建。目标是创建一个抽象层,使 Theano 更易于使用,从而实现快速原型设计。August 2015
谷歌聘请了弗朗索瓦·乔莱特。November 2015
TensorFlow由 Google 发布,灵感来自 Theano 及其声明性计算图范式。December 2015
Keras经过重构以允许可插拔的后端引擎,现在它为 Theano 和 Tensorflow 提供后端实现。
Keras(CNTK、MxNet)后来支持了其他后端,但它们从来没有受到太大的关注。
时间流逝,Tensorflow 和 Keras 之间的重叠越来越大。Tensorflow 最终复制了 Keras 中的许多功能(除了 Tensorflow 中的多个 API 也有很大的重叠)。
September 2017
Theano已停产。November 2017
Keras 与 Tensorflow 捆绑为tf.keras
. 从现在开始,有两种不同的 Keras:一种与 Tensorflow 捆绑在一起,另一种支持多个后端引擎。两者都由同一个人维护,并在 API 级别保持同步。
在某个时候,Tensorflow 2.0 的路线图已经确定,选择追求像PyTorch这样的命令式模型。领导 Tensorflow API 重构的人是 François Chollet。这种重构包括对功能的重组以避免重复。
November 2018
Tensorflow的一些关键功能将被转移tf.keras
,引发激烈争论September 2019
Keras 2.3 被宣布为 Keras 多后端版本的最后一个版本
现在,您的问题的答案:Tensorflow 是最常用的 Keras 后端,因为它是唯一一个拥有相关用户群且正在积极开发中的后端,此外,唯一积极开发和维护的 Keras 版本是使用 Tensorflow 的版本.
所以,总结一下:
- 在 Keras 开始的时候,和 Tensorflow 的重叠很小。Tensorflow 有点难用,Keras 简化了很多。
- 后来,Tensorflow 加入了许多类似于 Keras 的功能。Keras 变得不那么必要了。
- 然后,除了多后端版本之外,Keras 还与 Tensorflow 捆绑在一起。多年来,他们的分界线越来越模糊。
- 多后端 Keras 版本已停产。现在唯一的 Keras 是与 Tensorflow 捆绑在一起的。
更新:Keras 和 Tensorflow 之间的关系最好用一个例子来理解:
Keras 和 Tensorflow 之间的依赖关系是 Keras 内部的,它不会暴露给使用 Keras 的程序员。例如,在 Keras 的源码中,有一个卷积层的实现;这个实现调用包keras.backend
来实际运行卷积计算;根据 Keras 配置文件,此后端设置为使用 Tensorflow后端实现keras.backend.tensorflow_backend.py
;这个 Keras 文件只是调用 Tensorflow 来计算卷积
更新 2:时间线中的新重要事件:
August 2021
: Tensorflow 2.6.0不再包含Keras 。Keras 现在拥有自己的 PIP 包 (keras
) 并存在于自己的github 存储库中。
Keras 是一个应用程序编程接口 (API)。它是一个可以支持多后端的单一接口,这意味着程序员可以编写一次 Keras 代码,并且可以在各种神经网络框架(例如 TensorFlow、CNTK 或 Theano)中执行。
让我们回到这里的基础。
不使用后端(例如 Tensorflow)是不可能只使用 Keras 的,因为 Keras只是一个扩展,可以让机器学习程序的读写变得更容易。创建模型所需的所有实际计算都没有在 Keras 中实现,这就是为什么您需要使用后端库才能工作的原因。
当您在 Keras 中创建模型时,实际上您仍在使用 Tensorflow 创建模型,Keras只是让编码变得更容易。
另外:将其视为抽象层。
Keras 提供了构建和思考神经网络的好方法和直观的方法,但您必须了解计算机不是这样接受命令的。将这种复杂性隐藏在 Tensorflow 背后,让我们能够自然地思考构建神经网络,而不是实现背后的所有细节。
(总的来说,这就是 python 如此受欢迎的原因,因为它抽象了复杂性,让你更自然、更直观地思考和写下解决方案)