我有一些从互联网上获得的工作 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,前者版本更高,更丰富。
相关阅读资料,有用但不足以解决“是否需要修复?” 问题:
- 使用 TensorFlow contrib keras 时导入语句
- “import keras”和“import tensorflow.keras”有什么区别
- Keras 和 tf.keras 之间的区别:是否应该更改旧的 Keras 代码?
- 为什么keras不允许以这种方式添加卷积层?
谢谢!