Quels sont / sont les filtres par défaut utilisés par Keras Convolution2d ()?

18

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,

ChrisFal
la source
2
Cela vient de la compréhension de la partie convolution des CNN. Vous pouvez lire ici: cs231n.github.io/convolutional-networks
Christian Safka

Réponses:

15

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: Wglorot_uniform

WU(6nin+nout,6nin+nout),

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é.ninnout

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:

visualisation des filtres net conv

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.

chronogramme
la source
5
glorot_uniformn'utilise pas la distribution normale. Je pense que vous décrivez glorot_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).
Neil Slater
Tim, merci d'avoir fourni le calcul. @Neil Slater - votre idée que les filtres, après un entraînement avec rétropropagation, pourraient finir par ressembler à la détection des bords, etc., a été très utile. Si j'avais plus de réputation, je attribuerais +1 à vos deux contributions.
ChrisFal
@NeilSlater Merci pour votre commentaire - vous avez raison, j'avais confondu glorot_normalet glorot_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é.
timleathart
6

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 kA ) ( i , j ) = l = 0 , 1 , 2 m = 0 , 1 , 2 F k ( l , m ) A ( i - l , j -AFkBk(i,j)

Bk(i,j)=(FkA)(i,j)=l=0,1,2m=0,1,2Fk(l,m)A(il,jm)

entrez la description de l'image ici

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.

lucky6qi
la source
J'ai compris ce calcul, mais je suis sûr que de nombreux lecteurs de ce fil trouveront le diagramme utile. Donc merci!
ChrisFal
imghost.in/images/2018/03/06/XvatD.jpg peut-être que l'image doit être en coords (0,0) sur B?
vinnitu
@vinnitu oui, en effet. En fait, je dois également modifier le B en Bk (i, j), (i = 0,1,2, j = 0,1,2).
lucky6qi