tf.keras.layers和tf.layers有什么区别?

时间:2018-06-28 18:35:11

标签: python tensorflow keras

tf.keras.layers与tf.layers有什么区别?
例如。他们两个都有Conv2d,它们提供不同的输出吗?
 如果将它们混合在一起(在一个隐藏层中像tf.keras.layers.Conv2d,在下一个隐藏层tf.layers.max_pooling2d之类的东西)会有好处吗?

3 个答案:

答案 0 :(得分:7)

deleteMany是一个tensorflow-keras层,而tf.keras.layers.Conv2d是一个tensorflow的``本机层''

您不能直接在Keras模型中使用本机层,因为它将缺少Keras API所需的某些属性。

但是,如果将其包装在tensorflow-keras tf.layers.max_pooling2d层中,则可以使用本机层。与此相关的文档的链接如下。

https://www.tensorflow.org/api_docs/python/tf/keras/layers/Lambda

答案 1 :(得分:6)

至少从TensorFlow 1.12开始,tf.layers只是tf.keras.layers的包装器。

一些例子:

卷积tf.layers只是从卷积tf.keras.layers继承而来,请参见源代码here

@tf_export('layers.Conv2D')
class Conv2D(keras_layers.Conv2D, base.Layer):

所有core tf.layers的情况都一样,例如:

@tf_export('layers.Dense')
class Dense(keras_layers.Dense, base.Layer):

通过将Keras集成到TensorFlow中,维护几种不同的层实现几乎没有意义。 tf.keras正在成为TensorFlow的事实上的高级API,因此tf.layers现在只是tf.keras.layers的包装器。

答案 2 :(得分:5)

tf.layers模块是Tensorflow尝试创建类似Keras的API,而tf.keras.layers是兼容性包装器。实际上,大多数实现都回溯到tf.layers,例如tf.keras.layers.Dense继承了core implementation

@tf_export('keras.layers.Dense')
class Dense(tf_core_layers.Dense, Layer):
  # ...

由于tf.keras兼容性模块已单独检入Tensorflow回购中,因此它可能缺少Keras实际提供的功能。我会直接使用Keras或tf.layers,但不一定要混合使用。