将代码转换为
tf.keras
相当简单吗?我对代码的可移植性不太感兴趣,而是真正的差异。
tf.keras
相当简单吗?tf.keras和keras之间的区别在于Tensorflow对该框架进行了特定的增强。
keras
是一个API规范,描述了深度学习框架应如何实现特定部分,与模型定义和训练有关。它是框架不可知的,并支持不同的后端(Theano、Tensorflow等)。
tf.keras
是Keras API规范的Tensorflow特定实现。它为框架添加了对许多Tensorflow特定功能的支持,如:完美支持tf.data.Dataset
作为输入对象,支持eager执行等。
在Tensorflow 2.0中,tf.keras
将成为默认设置,我强烈建议您开始使用tf.keras
进行工作。
目前来看,TensorFlow几乎完全采用了Keras API,这是有很好的原因的 - 它简单易用、易学习,而“纯粹”的TensorFlow则带有大量样板代码。是的,您可以毫无问题地使用tf.keras,尽管您可能需要重新调整代码中的导入方式。例如
from keras.layers.pooling import MaxPooling2D
会变成:
from tensorflow.keras.layers import MaxPooling2D
Keras与tf.keras之间的历史曲折而漫长。
Keras:Keras是由Google AI Developer / Researcher François Chollet开发的高级(易于使用)API。它用Python编写,可在后端引擎(如TensorFlow、CNTK或Theano)上运行。
TensorFlow:这是由Google开发的库,专门面向深度学习开发者社区,让公众可以轻松地创建和使用深度学习应用程序。它是开源的,并且可在GitHub上获得。
随着Keras v1.1.0的发布,Tensorflow成为默认的后端引擎。这意味着:如果您在系统上安装了Keras,则同时也安装了TensorFlow。
后来,在TensorFlow v1.10.0中,首次引入了tf.keras子模块。在TensorFlow中将Keras集成的第一步。
随着Keras 2.3.0版本的发布,
请参阅François Chollet的此推文以使用tf.keras。
这意味着,需要到处修改代码。
从
from keras.models import Sequential
from keras.models import load_model
To
from tensorflow.keras.models import Sequential
from tensorflow.keras.models import load_model
在 requirements.txt 中,
tensorflow==2.3.0
*免责声明:如果您使用的是旧版本的Keras可能会出现冲突。这种情况下请使用pip uninstall keras
命令卸载。
>>> from tensorflow.python.keras import __version__ as tf_p_k_version
>>> from tensorflow.keras import __version__ as tf_k_version
>>> from keras import __version__ as k_version
>>> print(tf_p_k_version, tf_k_version, k_version)
2.6.0 2.11.0 2.11.0
我还使用grep命令搜索了Layer类的文档字符串,发现2.11版本的文档字符串并未安装在tensorflow中,而是在keras包中。
我的猜测是,如果存在keras,则tensorflow.keras实际上会导入keras,并且可能默认为tensorflow.python.keras(如果不存在keras)。