TensorFlow 1.1+中Keras和tf.keras有什么区别?

37

现在,TensorFlow 1.1已经支持使用tf.contrib.keras接口的Keras了。如果我打算使用TF后端和Keras,应该使用哪一个?

tf.contrib.keras版本与常规Keras发布版有何不同?(是否涉及到内部数据结构的TF特定优化)如果我使用其中之一,是否能从同时使用Keras和TensorFlow Core中受益?

还是说,tf.contrib.keras只是将Keras的相同代码库复制到不同的命名空间下吗?

4个回答

29

tf.keras(以前称为tf.contrib.keras)是一个使用/专门针对tensorflow实现的keras 2。它托管在tensorflow代码库上,并且与官方代码库有不同的代码库(最后一次提交在tf-keras分支中追溯到2017年5月)。

通常,如果您的代码使用任何特定于tensorflow的代码,则可以使用tf.keras更简单,例如提供输入的tf.data.*或在tensorboard中进行可视化的tf.summary.*。(有些人甚至建议不要使用带有TF的参考Keras实现,因为它偶尔会出现与此工具包的问题)。

另一方面,如果您计划积极维护一个框架无关的代码,则只能使用keras自己的软件包。

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

编辑

我参加了Chollet关于TF2的演讲(无法在网上找到录音),他基本上说,除了TF之外的框架支持最终将停止,并且Keras的未来发展将仅在tf.keras中进行。

从我所看到的情况来看,Keras的提交流正在逐渐减少,这已经在发生了。
这很有道理,因为目前唯一受欢迎的深度学习框架是pytorch,而pytorch不支持Keras。让Keras代码“不关注”Tensorflow——它唯一支持的主要框架——变得越来越没有意义。
因此,今天我的答案是默认使用tf.keras,并将Keras保留给那些难以迁移的遗留项目——这是Keras的未来选择。

3
"tf.data在我看来是一个改变游戏规则的东西" - 您能进一步解释一下吗? - saurabheights
1
现在是否有任何见解表明Keras(Keras vs tf.Keras)可以在Google Colab的TPU上运行?我正在使用Keras并将运行时设置为TPU,但显然它正在CPU上运行。 - alisa
1
@saurabheights 在TensorFlow中,tf.data管道是一个被低估的宝石。它允许您使用标准的TensorFlow操作编写自己的数据加载器和增强,并且它将在GPU上与图执行并行运行非常高效。据我所知,没有其他框架提供这种效率、灵活性和简单性的混合。 - P-Gn

12
Keras最好理解为API规范,而不是特定的代码库。实际上,未来将会有两个分别实现Keras规范的版本:内部的TensorFlow版本,可作为tf.keras使用,纯粹由TensorFlow编写,并与所有TensorFlow功能深度兼容;以及外部的多后端版本,支持Theano和TensorFlow(未来可能还会支持更多后端)。{{}}

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


1

最近François Chollet推文建议使用tf.keras

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

Theano和CNTK已经停止开发。与此同时,作为Keras后端,它们仅占Keras使用量的不到4%。其他96%的用户(其中超过一半已经在tf.keras上)更适合使用tf.keras。

Keras的开发重点将放在tf.keras上。

重要的是,我们将寻求在keras-team / keras中启动tf.keras的独立GitHub存储库,以使第三方人员更轻松地进行贡献。


-4
如果有两个Github存储库,您将如何同步拉取请求到tf.keras和此存储库?是否会有人将一个存储库中的更改应用于另一个存储库?
由于代码库不同,因此无需复制拉取请求。对于API更改,您将向API规范本身发送PR,并且对API规范的更改将在所有代码库中复制。

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


5
不过那并没有真正回答这个问题。如果我想使用TF后端,具体来说我应该导入tf.contrib.keras还是import keras - Olivier Lalonde
2
仍然感到困惑。如果API同步,这是否意味着这两个库对最终用户来说是相同的? - hsc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接