Maison >développement back-end >Tutoriel Python >Quand la couche dense Keras aplatit-elle l'entrée ?
L'énigme de la forme de sortie de la couche dense Keras
Dans Keras, la couche dense a longtemps été documentée pour aplatir son entrée avant d'appliquer le produit scalaire avec le noyau. Cependant, un comportement récent suggère le contraire.
Problème :
Comme illustré dans le code de test ci-dessous, la sortie de la couche Dense conserve le dernier axe du tenseur d'entrée :
input1 = layers.Input((2,3)) output = layers.Dense(4)(input1) print(output)
Sortie :
<tf.Tensor 'dense_2/add:0' shape=(?, 2, 4) dtype=float32>
Réponse :
Contrairement à la documentation, la couche Dense n'aplatit pas l'entrée. Au lieu de cela, il applique son fonctionnement indépendamment le long du dernier axe. Ainsi, étant donné une entrée de forme (n_dim1, n_dim2, ..., n_dimk), la forme de sortie devient (n_dim1, n_dim2, ..., m), où m est le nombre d'unités dans la couche dense.
Implications :
Ce comportement rend TimeDistributed(Dense(...)) et Dense(...) fonctionnellement équivalents. De plus, étant donné que les poids sont partagés sur le dernier axe, la couche Dense avec la forme d'entrée (n_dim1, n_dim2, ..., n_dimk) n'a que m * n_dimk m (paramètres de biais par unité) paramètres entraînables.
Illustration visuelle :
[Image d'un réseau neuronal avec une couche dense appliquée à une entrée à plusieurs dimensions]
Cette illustration montre comment le fonctionnement de la couche dense est appliqué indépendamment le long du dernier axe du tenseur d'entrée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!