Je suis assez nouveau dans les réseaux de neurones, mais je comprends assez bien l'algèbre linéaire et les mathématiques de la convolution.
J'essaie de comprendre l'exemple de code que je trouve à divers endroits sur le net pour former un NN convolutionnel Keras avec des données MNIST pour reconnaître les chiffres. Je m'attendais à ce que lorsque je crée une couche convolutionnelle, je devrais spécifier un filtre ou un ensemble de filtres à appliquer à l'entrée. Mais les trois échantillons que j'ai trouvés créent tous une couche convolutionnelle comme celle-ci:
model.add(Convolution2D(nb_filter = 32, nb_row = 3, nb_col = 3,
border_mode='valid',
input_shape=input_shape))
Cela semble appliquer un total de 32 filtres 3x3 aux images traitées par le CNN. Mais quels sont ces filtres? Comment pourrais-je les décrire mathématiquement? La documentation des keras n'est d'aucune aide.
Merci d'avance,
Réponses:
Par défaut, les filtres sont initialisés de manière aléatoire à l'aide de la méthode, qui tire des valeurs d'une distribution uniforme avec des limites positives et négatives décrites comme suit:W W∼U(6nin+nout,−6nin+nout),
glorot_uniform
où est le nombre d'unités qui alimentent cette unité et est le nombre d'unités vers lesquelles ce résultat est alimenté.nin nout
Lorsque vous utilisez le réseau pour effectuer une prédiction, ces filtres sont appliqués à chaque couche du réseau. Autrement dit, une convolution discrète est effectuée pour chaque filtre sur chaque image d'entrée, et les résultats de ces convolutions sont transmis à la couche de convolutions suivante (ou à la couche entièrement connectée, ou à tout ce que vous pourriez avoir).
Pendant l'entraînement, les valeurs dans les filtres sont optimisées avec rétrogradation par rapport à une fonction de perte. Pour les tâches de classification telles que la reconnaissance des chiffres, la perte d'entropie croisée est généralement utilisée. Voici une visualisation de certains filtres appris dans la première couche (en haut) et les filtres appris dans la deuxième couche (en bas) d'un réseau convolutionnel:
Comme vous pouvez le voir, les filtres de la première couche agissent essentiellement comme de simples détecteurs de bord, tandis que les filtres de la deuxième couche sont plus complexes. Au fur et à mesure que vous approfondissez un réseau, les filtres sont capables de détecter des formes plus complexes. Cela devient un peu difficile à visualiser, car ces filtres agissent sur des images qui ont déjà été convolées plusieurs fois et ne ressemblent probablement pas beaucoup à l'image naturelle d'origine.
la source
glorot_uniform
n'utilise pas la distribution normale. Je pense que vous décrivezglorot_normal
. Je ne pense pas que la réponse soit très importante - les points clés sont l'initialisation aléatoire suivie des effets de la formation. Il pourrait être utile d'expliquer comment les filtres formés finissent par ressembler à des filtres de bord / coin, etc. (peut-être avec l'une des images classiques des filtres de première couche d'imagerie avant / après la formation).glorot_normal
etglorot_uniform
, et j'ai mis à jour la réponse pour refléter cela. J'ai également ajouté un peu d'informations supplémentaires sur la façon dont les filtres finissent, comme vous l'avez suggéré.Ce sont des noyaux de convolution. Par exemple, votre image est 5x5, vous avez 32 noyaux de convolution 3x3 . Le border_mode est «valide», ce qui signifie qu'il n'y a pas de remplissage autour de l'entrée, donc les pixels (i, 0), (0, j), (i, 4), (4, j) sont perdus. Ainsi vos résultats sont 32 images 3x3 , (i = 1,2,3, j = 1,2,3), chaque image résultat est définie par la convolution: F k B k ( i , j ) B k ( i , j ) = ( F k ∗ A ) ( i , j ) = ∑ l = 0 , 1 , 2 ∑ m = 0 , 1 , 2 F k ( l , m ) A ( i - l , j -A Fk Bk(i,j)
Le modèle traned entraînera les noyaux en fonction de votre fonction de coût, et à la fin ces noyaux sont les filtres de votre modèle.
la source