我遇到了严重的不兼容问题,因为相同的代码在一个与另一个之间运行;例如:
查看Github source时,模块及其导入看起来完全相同,甚至tf.keras
甚至从tf.python.keras
导入。在教程中,我看到两者都经常使用。例如,下面的代码将以tf.python.keras
失败。
怎么了?有什么区别,什么时候应该使用其中一个?
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Nadam
import numpy as np
ipt = Input(shape=(4,))
out = Dense(1, activation='sigmoid')(ipt)
model = Model(ipt, out)
model.compile(optimizer=Nadam(lr=1e-4), loss='binary_crossentropy')
X = np.random.randn(32,4)
Y = np.random.randint(0,2,(32,1))
model.train_on_batch(X,Y)
其他信息:
tensorflow
,tensorflow-gpu
v2.0.0和Keras 2.3.0(通过pip),其他都通过Anaconda 3 答案 0 :(得分:4)
从官方TensorFlow dev起,缩短了(强调我的意思):
API导入位于软件包的根目录中。其他任何导入都只是Python,允许您访问私有程序而无需考虑良好的编码习惯。
导入的唯一方法是
import tensorflow as tf tf.keras
我们还为
from tensorflow.keras import
提供支持, 尽管这很脆弱,但随着我们不断进行重构,它可能会崩溃。 从tensorflow.python
或任何其他模块(包括import tensorflow_core
(包括tf.python.keras
)导入,并且可能会在未通知的情况下中断。
我:要确认,tf.python
是私有,用于开发,而不是公开使用?
是的,确实如此。
tf.python
下的任何内容都是私有的
但是,这还不是全部。 tf.python.framework
仍然是访问某些功能/类的唯一方法-例如tf.python.ops
中使用的tf.keras.optimizers
和tf.python
。但是如上所述,除非您正在“开发”(即编写自定义功能或类),否则这不会成为问题。无需触摸tf.keras
即可使用“开箱即用”功能。
请注意,这不仅是兼容性问题,而且“只要没有任何问题”,两者就不能互换。例如,tf.python.keras
使用optimizer_v2,这与tf.python.keras
Optimizer完全不同。
最后,请注意,以上两个链接都以tf.keras
结尾-不确定,但是看来OptimizerV2
在TF Github中实际上并不存在(例如,没有引用tensorflow_core/python/keras/api/_v2
) ,但在本地安装时,它会与from tensorflow import keras
print(keras.__file__)
from tensorflow.python import keras
print(keras.__file__)
文件夹中的TF 合并:
D:\Anaconda\lib\site-packages\tensorflow_core\python\keras\api\_v2\keras\__init__.py
D:\Anaconda\lib\site-packages\tensorflow_core\python\keras\__init__.py
python/
尽管两者都共享tf.python
文件夹,但它们不是 两者__init__.py
-可以从各自的tf.python.keras.optimizers
进行验证。
更新:tf.python.keras.layers
和tf.keras.optimizers
一起使用的tf.keras.layers
与done
一起使用的ver
运行速度慢了 11.5倍中型模型(code)。我继续在用户代码中看到前者-将其视为警告提示。