3

我有一些从互联网上获得的工作 Python3 源代码,其中初始 Keras 导入是这样直接的:

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
...

在 TensorFlow 文档中,我看到了以下间接形式:

import tensorflow as tf
from tensorflow.keras import layers
...

对我来说,它们似乎分别意味着,可以在不知道 TensorFlow 落后的情况下使用 Keras,并且 Keras 是(再次?)作为 TensorFlow 的一部分提供的。(我有点期待 Keras 在前一种情况下同样提供对 TensorFlow 的引用)

有什么区别?这取决于 Keras 和 TensorFlow 的安装方式,还是取决于它们的使用方式?这是我必须摆脱的潜在混乱来源吗?换句话说,我应该修复我的安装,以及如何修复?还是我应该接受有两个,并管理它们各自的用法以安全地与它们一起生活?

背景:我的安装是在 Ubuntu Linux 下,使用 Python3.5.2,其中pip3 list显示了以下包:

Keras (2.2.4)
Keras-Applications (1.0.6)
Keras-Preprocessing (1.0.5)
tensorboard (1.12.0)
tensorflow (1.12.0)

顺便说一句,我已经检查过它们确实不同:

import keras as keras
import tensorflow.keras as tf_keras
print( keras is tf_keras )
---> False
print( [keras.__version__ , tf_keras.__version__] )
---> ['2.2.4', '2.1.6-tf']
print( [len(dir(keras)) , len(dir(tf_keras)) ] )
---> [32, 30]
print( [ len(dir(keras.models)) , len(dir(tf_keras.models)) ] )
---> [27, 17]
print( [ len(dir(keras.layers)) , len(dir(tf_keras.layers)) ] )
---> [167, 117]

事实上,我似乎有两个不同的 Keras,前者版本更高,更丰富。

相关阅读资料,有用但不足以解决“是否需要修复?” 问题:

谢谢!

4

3 回答 3

1

我不会发布我自己的答案,而是向您指出一个非常详尽的答案,比我能写的要好得多:它就在这里(感谢Adrian Rosebrock)。

免责声明:我与 Adrian 或他的活动没有任何联系。不过,我非常感谢他的解释。

于 2019-12-09T17:14:54.720 回答
0

无需修复。它们是两个不同的包,您只需管理它们各自的用法。

于 2019-03-13T17:37:14.843 回答
0

截至 2021 年 9 月的官方说法:

用户应始终使用from tensorflow import keras它将为他们提供公共 API。

import keras将直接访问kerasPIP 包,这与公共 API 命名空间不是 100% 相同。它可能会给你keras.Model/layers.*等,但不是所有的 API。在后台,我们填充了所有的 API keras/api/*tensorflow __init__文件将从那里获取它们。

https://discuss.tensorflow.org/t/keras-project-moved-to-new-repository-in-https-github-com-keras-team-keras/1999/10

于 2022-01-26T22:17:41.113 回答