Je viens de commencer mon parcours ML et j'ai fait quelques tutoriels. Une chose qui n'est pas claire (pour moi) est la façon dont le paramètre 'filter' est déterminé pour Keras Conv2D.
La plupart des sources que j'ai lues fixent simplement le paramètre à 32 sans explication. S'agit-il d'une simple règle ou les dimensions des images d'entrée jouent-elles un rôle? Par exemple, les images dans CIFAR-10 sont au format 32x32.
Plus précisément:
model = Sequential()
filters = 32
model.add(Conv2D(filters, (3, 3), padding='same', input_shape=x_train.shape[1:]))
model.add(Activation('relu'))
model.add(Conv2D(filters, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
La couche suivante a un paramètre de filtre de filtre * 2 ou 64. Encore une fois, comment est-il calculé?
Tx.
Joe
En fait, il n’ya pas de bonne réponse à votre question. La plupart des architectures sont généralement soigneusement conçues et optimisées au cours de nombreuses expériences. Je pourrais partager avec vous certaines des règles empiriques à appliquer lors de la conception de sa propre architecture:
Évitez un réduction de la dimension dans le premier calque. Supposons que votre filtre d'entrée ait une forme spatiale (n, n)
pour une image RGB
. Dans ce cas, il est recommandé de définir des numéros de filtre supérieurs à n * n * 3
car il s'agit de la dimensionnalité de l'entrée d'un filtre unique. Si vous définissez un nombre plus petit, vous pourriez souffrir du fait que de nombreuses informations utiles sur l'image sont perdues en raison de l'initialisation qui a supprimé les dimensions informatives. Bien sûr - ceci n’est pas une règle générale - par exemple pour une reconnaissance de texture, où la complexité de l'image est moindre - un petit nombre de filtres peut en fait aider.
Pensez davantage au volume qu'au filtre - lors de la définition du nombre de filtres, il est important de penser au changement de volume plutôt qu'au changement de nombre de filtres entre les couches consécutives. Par exemple. dans VGG
- même si le nombre de filtres double après la couche de regroupement - le volume réel de la carte des caractéristiques est réduit d'un facteur 2, car il réduit le facteur 4
. Diminuer généralement la taille du volume de plus de 3 devrait être considéré comme une mauvaise pratique. La plupart des architectures modernes utilisent un facteur de chute de volume compris entre 1 et 2. Pourtant - ceci n’est pas une règle générale - par ex. dans le cas d'une hiérarchie étroite - la plus grande valeur de la baisse de volume pourrait en fait aider.
Évitez _ {embouteillage} _. Comme on peut le lire dans ce jalon papier un embouteillage pourrait sérieusement nuire à votre processus de formation. Il se produit lorsque la baisse du volume est trop grave. Bien sûr, cela peut toujours être réalisé, mais vous devez alors utiliser le sous-échantillonnage intelligent, utilisé par exemple. dans Inception v>2
Vérifiez les convolutions 1x1 - on pense que l'activation des filtres est fortement corrélée. On peut en tirer parti en utilisant 1x1 convolutions - à savoir une convolution avec une taille de filtre de 1. Cela rend possible par ex. volume chuté par eux au lieu de pooling
ou sous-échantillonnage intelligent (voir exemple ici ). Vous pourriez par exemple construisez deux fois plus de filtres, puis coupez 25% d’entre eux en utilisant des convections 1x1 comme couche consécutive.
Comme vous pouvez le voir. Il n'y a pas de moyen facile de choisir le nombre de filtres. À l'exception des astuces ci-dessus, j'aimerais partager avec vous l'un de mes contrôles de cohérence préférés sur le nombre de filtres. Il faut 2 étapes faciles:
Habituellement, si le nombre de filtres est trop faible (en général), ces deux tests vous le montreront. Si, au cours de votre formation, une régularisation survient, votre réseau sureffective gravement, cela indique clairement que votre réseau possède trop de filtres.
À votre santé.
Le nombre de filtres est choisi en fonction de la complexité de la tâche. Les tâches plus complexes nécessitent plus de filtres. Et généralement, le nombre de filtres augmente après chaque couche (par exemple, 128 -> 256 -> 512
). Les premières couches (avec un nombre de filtres plus faible) ne capturent que quelques-unes des caractéristiques simples des images (bords, teintes, etc.) et les couches suivantes tentent d'obtenir des caractéristiques plus complexes basées sur des images simples.
Il y a Nice course de Stanford pour vous donner l’intuition et la compréhension de CNN.