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

Gab*_*och 8 python keras tensorflow

tf.keras.layers和tf.layers有什么区别?
例如,他们都有Conv2d,他们提供不同的输出吗?
如果你混合它们有什么好处(像tf.keras.layers.Conv2d在一个隐藏层和下一个,tf.layers.max_pooling2d)?

Ale*_*lex 12

从TensorFlow 1.12开始,tf.layers仅仅是包装tf.keras.layers

一些例子:

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

@tf_export('layers.Conv2D')
class Conv2D(keras_layers.Conv2D, base.Layer):
Run Code Online (Sandbox Code Playgroud)

所有核心都一样tf.layers,例如:

@tf_export('layers.Dense')
class Dense(keras_layers.Dense, base.Layer):
Run Code Online (Sandbox Code Playgroud)

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


isa*_*tan 9

tf.keras.layers.Conv2d是张量流 - keras层,tf.layers.max_pooling2d而是张量流'原生层'

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

但是,如果包裹在tensorflow-keras Lambda层中,则可以使用本机层.下面是文档的链接.

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


nur*_*ric 7

tf.layers模块是Tensorflow尝试创建类似于Keras的Keras,而tf.keras.layers它是兼容性包装器.实际上,大多数实现都是指tf.layers,例如tf.keras.layers.Dense继承核心实现:

@tf_export('keras.layers.Dense')
class Dense(tf_core_layers.Dense, Layer):
  # ...
Run Code Online (Sandbox Code Playgroud)

由于tf.keras兼容性模块单独检入Tensorflow仓库,因此可能缺乏Keras实际提供的功能.我会直接使用Keras,tf.layers但不一定要混用它们.

  • 这个答案不再准确:现在正好相反,即 tf.layers 只是作为 tf.keras.layers 的包装器。看我的回答。 (2认同)