【问题标题】:What is the difference between Keras and tf.keras in TensorFlow 1.1+?TensorFlow 1.1+ 中的 Keras 和 tf.keras 有什么区别?
【发布时间】:2017-10-19 12:23:13
【问题描述】:

既然 TensorFlow 1.1 支持 tf.contrib.keras 下的 Keras API,如果我打算使用带有 TF 后端的 Keras,我应该使用哪一个?

tf.contrib.keras 版本与常规 Keras 发行版有什么不同吗? (想到内部数据结构的 TF 特定优化)。如果我同时使用 Keras 和 TensorFlow Core 有什么好处吗?

或者tf.contrib.keras 只是与 Keras 相同的代码库的副本,但在不同的命名空间下?

【问题讨论】:

    标签: tensorflow keras


    【解决方案1】:

    tf.keras(以前的 tf.contrib.keras)是 keras 2 的一个实现,专门使用/用于 tensorflow。它托管在 tensorflow repo 上,并且具有与官方 repo 不同的代码库(tf-keras 分支 dates back from May 2017 中的最后一次提交)。

    根据经验,如果您的代码使用任何特定于 TensorFlow 的代码,请在 tf.data.* 中输入任何内容以提供输入,或在 tf.summary.* 中输入以在 tensorboard 中进行可视化,使用 tf.keras 会更简单。 (由于occasional problems it has with this toolkit,有些人甚至可能建议不要使用带有 TF 的参考 Keras 实现。

    另一方面,如果您打算积极维护与框架无关的代码,那么使用 keras 自己的包是您唯一的选择。

    如果您不太关心与框架无关但不使用特定于 tensorflow 的代码,我可能会建议您使用 tf.keras 并开始使用特定于 tensorflow 的代码,尤其是。 tf.data 在我看来是一个改变游戏规则的人。

    编辑

    我参加了 Chollet 关于 TF2 的演讲(在网上找不到录音),他基本上说,对 TF 以外的框架的支持最终会下降,Keras 的未来发展将完全发生在tf.keras

    据我所知,这已经发生了,因为 Keras' commit stream 这些天越来越瘦了。

    这很有意义,因为到目前为止,唯一流行的 DL 框架是 pytorch,Keras 不支持它。让 Keras 代码对 tensorflow(它支持的唯一主要框架)“不可知”越来越没有意义。

    所以今天,我的答案是默认使用tf.keras,并将 Keras 保留用于难以迁移的遗留项目——这是 Keras 面向未来的选择。

    【讨论】:

    • tf.data which is a game-changer in my opinion - 你能详细说明一下吗?
    • 现在有什么见解可以在 Google Colab 的 TPU 上运行 Keras(Keras 与 tf.Keras)吗?我正在使用 Keras 并将运行时设置设置为 TPU,但它显然是在 CPU 上运行
    • @saurabheights tensorflow 中的tf.data 管道是一颗被低估的宝石。它允许您使用标准 tensorflow 操作编写自己的数据加载器和增强功能,并且它将非常有效地与您在 GPU 上的图形执行并行运行。 AFAIK 没有其他框架能够提供这种效率、灵活性和简单性的结合。
    【解决方案2】:

    最近的 François Chollet tweet 建议使用 tf.keras

    我们建议您将 Keras 代码切换到 tf.keras。

    Theano 和 CNTK 都已停止开发。与此同时,作为 Keras 后端,它们仅占 Keras 使用量的不到 4%。其余 96% 用户(其中​​一半以上已经在 tf.keras 上)更好 与 tf.keras 一起提供。

    Keras 开发将集中在 tf.keras 上。

    重要的是,我们将寻求开始自行开发 tf.keras keras-team/keras 的独立 GitHub 存储库 第三方人员更容易做出贡献。

    【讨论】:

      【解决方案3】:

      Keras 最好被理解为 API 规范,而不是特定的 代码库。事实上,往前会有两个独立的 Keras 规范的实现:内部 TensorFlow 之一, 以 tf.keras 的形式提供,用纯 TensorFlow 编写并深入 兼容所有 TensorFlow 功能,以及外部 支持 Theano 和 TensorFlow 的多后端(并且可能 未来会有更多后端)。

      https://blog.keras.io/introducing-keras-2.html

      【讨论】:

        【解决方案4】:

        如果有两个 github 仓库,你会如何同步 pull 对 tf.keras 和这个存储库的请求?会有人吗 将一个存储库中的更改应用到另一个存储库?

        代码库会有所不同,因此无需复制 拉取请求。对于 API 更改,您可以向 API 规范发送 PR 本身,并且对 API 规范的更改将被复制到所有 代码库。

        https://github.com/fchollet/keras/issues/5299#issuecomment-278166426

        【讨论】:

        • 但这并不能真正回答这个问题。如果我想使用 TF 后端,具体应该import tf.contrib.keras 还是import keras
        • 仍然感到困惑。如果 API 是同步的,这是否意味着这两个库对最终用户来说是相同的?
        猜你喜欢
        • 1970-01-01
        • 2020-03-16
        • 1970-01-01
        • 2020-02-05
        • 1970-01-01
        • 1970-01-01
        • 2021-03-13
        • 1970-01-01
        • 2017-11-25
        相关资源
        最近更新 更多