web-dev-qa-db-de.com

Was ist der Unterschied zwischen tf.keras.layers und tf.layers?

Was ist der Unterschied zwischen tf.keras.layers und tf.layers?
Z.B. Beide haben Conv2d. Haben sie unterschiedliche Ausgänge?
Gibt es irgendwelche Vorteile, wenn Sie sie mischen (etwa wie tf.keras.layers.Conv2d in einer verborgenen Ebene und in der nächsten, tf.layers.max_pooling2d)?

5
Gabriel_Koch

tf.keras.layers.Conv2d ist eine Tensorflow-Kera-Schicht, während tf.layers.max_pooling2d eine Tensorflow-native Ebene ist.

Sie können eine native Ebene nicht direkt in einem Keras-Modell verwenden, da bestimmte Attribute fehlen, die für die Keras-API erforderlich sind.

Es ist jedoch möglich, die native Ebene zu verwenden, wenn sie in eine Tensorflow-Keras-Variable (Lambda) eingeschlossen ist. Ein Link zur Dokumentation hierzu ist unten.

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

7
isaacsultan

Das tf.layers-Modul ist ein Tensorflow-Versuch zum Erstellen einer Keras-ähnlichen API, während tf.keras.layers ein Kompatibilitätswrapper ist. Tatsächlich bezieht sich der Großteil der Implementierung auf tf.layers, zum Beispiel erbt der tf.keras.layers.Dense die core-Implementierung :

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

Da das tf.keras-Kompatibilitätsmodul separat in das Tensorflow-Repo eingecheckt wird, fehlt möglicherweise das, was Keras tatsächlich bietet. Ich würde Keras direkt oder tf.layers verwenden, aber nicht unbedingt mischen.

5
nuric

Zumindest ab TensorFlow 1.12 ist tf.layers lediglich eine Umhüllung um tf.keras.layers.

Einige Beispiele:

Convolutional tf.layers erbt nur vom Convolutional tf.keras.layers, siehe Quellcode hier :

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

Dasselbe gilt für alle core tf.layers , z.

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

Mit der Integration von Keras in TensorFlow wäre es wenig sinnvoll, mehrere verschiedene Layer-Implementierungen beizubehalten. tf.keras wird zur faktischen High-Level-API für TensorFlow, daher tf.layers nur noch um tf.keras.layers.

1
Alex