tf.keras 和 tf.python.keras 有什么区别?
What is the difference between tf.keras and tf.python.keras?
我 运行 遇到了相同代码 运行 的严重不兼容问题;例如:
查看 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)
附加信息:
- CUDA 10.0.130,cuDNN 7.4.2,Python3.7.4,Windows10
tensorflow
、tensorflow-gpu
v2.0.0 和 Keras 2.3.0 通过 pip,所有其他通过 Anaconda 3
来自官方 TensorFlow dev,缩短(强调我的):
The API import is in the root of the package. Any other import is just Python allowing you to access privates with no consideration for good coding practices.
The only way that imports should be are
import tensorflow as tf
tf.keras
We also provide support for from tensorflow.keras import
,
though this is brittle and can break as we keep refactoring.
Importing from tensorflow.python
or any other modules (including import tensorflow_core
) is not supported, and can break unannounced.
我:确认一下,tf.python.keras
是私有的,用于开发,而不是public使用?
Yes, that's exactly the case. Anything under tf.python
is private
然而,这并不是全貌。 tf.python
仍然是访问某些功能的唯一途径 / 类 - 例如 tf.python.framework
和 tf.python.ops
,两者都在 tf.keras.optimizers
中使用。但如上所述,这不会成为一个问题,除非你是 "developing" - 即编写自定义功能或 类。 "Out of box" 不用碰 tf.python
.
就可以正常使用
请注意,这不仅是兼容性问题,而且两者 不可 互换 "as long as nothing breaks";例如,tf.keras
使用 optimizer_v2, which differs substantially from tf.python.keras
Optimizer。
最后,请注意,以上两个链接都以 tf.python.keras
结尾——不确定,但似乎 tf.keras
实际上并不存在于 TF Github 中(例如,没有引用OptimizerV2
),但在本地安装时 确实 与 tensorflow_core/python/keras/api/_v2
文件夹中的 TF 合并:
from tensorflow import keras
print(keras.__file__)
from tensorflow.python import keras
print(keras.__file__)
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
中验证。
UPDATE:tf.python.keras.optimizers
与 tf.python.keras.layers
一起使用 vs tf.keras.optimizers
与 tf.keras.layers
一起使用运行 11.5x对于中型型号 (code),速度较慢 。我继续在用户代码中看到前者 - 将此视为警告。
我 运行 遇到了相同代码 运行 的严重不兼容问题;例如:
查看 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)
附加信息:
- CUDA 10.0.130,cuDNN 7.4.2,Python3.7.4,Windows10
tensorflow
、tensorflow-gpu
v2.0.0 和 Keras 2.3.0 通过 pip,所有其他通过 Anaconda 3
来自官方 TensorFlow dev,缩短(强调我的):
The API import is in the root of the package. Any other import is just Python allowing you to access privates with no consideration for good coding practices.
The only way that imports should be are
import tensorflow as tf tf.keras
We also provide support for
from tensorflow.keras import
, though this is brittle and can break as we keep refactoring. Importing fromtensorflow.python
or any other modules (includingimport tensorflow_core
) is not supported, and can break unannounced.
我:确认一下,tf.python.keras
是私有的,用于开发,而不是public使用?
Yes, that's exactly the case. Anything under
tf.python
is private
然而,这并不是全貌。 tf.python
仍然是访问某些功能的唯一途径 / 类 - 例如 tf.python.framework
和 tf.python.ops
,两者都在 tf.keras.optimizers
中使用。但如上所述,这不会成为一个问题,除非你是 "developing" - 即编写自定义功能或 类。 "Out of box" 不用碰 tf.python
.
请注意,这不仅是兼容性问题,而且两者 不可 互换 "as long as nothing breaks";例如,tf.keras
使用 optimizer_v2, which differs substantially from tf.python.keras
Optimizer。
最后,请注意,以上两个链接都以 tf.python.keras
结尾——不确定,但似乎 tf.keras
实际上并不存在于 TF Github 中(例如,没有引用OptimizerV2
),但在本地安装时 确实 与 tensorflow_core/python/keras/api/_v2
文件夹中的 TF 合并:
from tensorflow import keras
print(keras.__file__)
from tensorflow.python import keras
print(keras.__file__)
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
中验证。
UPDATE:tf.python.keras.optimizers
与 tf.python.keras.layers
一起使用 vs tf.keras.optimizers
与 tf.keras.layers
一起使用运行 11.5x对于中型型号 (code),速度较慢 。我继续在用户代码中看到前者 - 将此视为警告。