Quelle est la différence entre tf.keras.layers et tf.layers?
Par exemple. tous les deux ont Conv2d, fournissent-ils des sorties différentes?
Y a-t-il des avantages à les mélanger (quelque chose comme une tf.keras.layers.Conv2d dans une couche cachée et dans la suivante, tf.layers.max_pool2d)?
tf.keras.layers.Conv2d
est une couche tensorflow-keras tandis que tf.layers.max_pooling2d
est une "couche native" de tensorflow
Vous ne pouvez pas utiliser une couche native directement dans un modèle Keras, car certains attributs requis par l'API Keras seront manquants.
Cependant, il est possible d'utiliser une couche native si elle est encapsulée dans une couche tensorflow-keras Lambda
. Un lien vers la documentation est disponible ci-dessous.
https://www.tensorflow.org/api_docs/python/tf/keras/layers/Lambda
Le module tf.layers
correspond à la tentative de Tensorflow de créer une API semblable à celle de Keras alors que tf.keras.layers
est un wrapper de compatibilité. En fait, la plupart des implémentations font référence à tf.layers
, par exemple le tf.keras.layers.Dense
hérite de l'implémentation core :
@tf_export('keras.layers.Dense')
class Dense(tf_core_layers.Dense, Layer):
# ...
Étant donné que le module de compatibilité tf.keras
est archivé séparément dans le référentiel Tensorflow, il se peut qu’il n’ait pas la même chose que ce que propose Keras. Je voudrais utiliser Keras directement ou tf.layers
mais pas nécessairement les mélanger.
Au moins à partir de TensorFlow 1.12, tf.layers
sont simplement des enveloppes autour de tf.keras.layers
.
Quelques exemples:
tf.layers
convolutionnel vient d'hériter du tf.keras.layers
convolutionnel, voir le code source ici :
@tf_export('layers.Conv2D')
class Conv2D(keras_layers.Conv2D, base.Layer):
La même chose est vraie pour tous core tf.layers
, par exemple:
@tf_export('layers.Dense')
class Dense(keras_layers.Dense, base.Layer):
Avec l'intégration de Keras dans TensorFlow, il serait peu logique de conserver plusieurs implémentations de couches différentes. tf.keras
est en train de devenir l'API de haut niveau de facto pour TensorFlow. Par conséquent, tf.layers
sont désormais des wrappers autour de tf.keras.layers
.