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)?
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
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.
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
.