Remodelage inattendu dans l'entrée de la couche dense de Keras : percer le mystère
Dans Keras, la couche dense est un élément de base couramment utilisé pour les réseaux de neurones . Cependant, les utilisateurs peuvent rencontrer un comportement inattendu où l'entrée n'est pas aplatie avant d'appliquer les opérations de la couche.
Dans l'extrait de code fourni :
input1 = layers.Input((2,3)) output = layers.Dense(4)(input1)
Au lieu d'aplatir le tenseur d'entrée input1 avec dimensions (2,3), on observe étonnamment un tenseur de sortie de dimensions (?, 2, 4). Cela contredit l'affirmation de la documentation selon laquelle les entrées dont le rang est supérieur à 2 doivent être aplaties.
L'examen de l'implémentation actuelle de Keras révèle cependant un comportement différent : la couche Dense est en fait appliquée au dernier axe du tenseur d'entrée. Cela signifie que dans l’exemple donné, chaque ligne 2D de input1 passe indépendamment à travers la couche densément connectée. Par conséquent, la sortie conserve la première dimension et ajoute le nombre d'unités spécifié (4) à la dernière dimension.
Cet écart par rapport à la documentation a des implications significatives :
Exemple :
model = Sequential() model.add(Dense(10, input_shape=(20, 5))) model.summary()
Le résumé du modèle résultant montre seulement 60 paramètres entraînables, malgré la couche densément connectée comportant 10 unités. En effet, chaque unité se connecte aux 5 éléments de chaque ligne avec des poids identiques.
Illustration visuelle :
[Image : Illustration visuelle de l'application d'une couche dense sur un entrée avec deux dimensions ou plus dans Keras]
En conclusion, la couche Dense dans Keras s'applique indépendamment au dernier axe du tenseur d'entrée, conduisant à une sortie non aplatie dans certains scénarios. Ce comportement a des implications pour la conception du modèle et le partage des paramètres.
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!