from keras import layers, models
model = models.Sequential()
model.add(layers.Conv2D(32,(3,3),activation="relu",input_shape=(150,150,3)))
Si vous recherchez "keras Conv2D", vous trouverez "couche de convolution 2D". Alors, qu'est-ce qu'une "couche de convolution bidimensionnelle"? Il existe également le terme «réseau neuronal convolutif unidimensionnel». Par conséquent, comme prémisse pour comprendre "Quelle est la différence entre la 1ère dimension et la 2ème dimension?" Il est nécessaire de comprendre le «réseau neuronal à convolution» et la «convolution».
Réseau neuronal convolutif.
Convolutif: Convolutif Réseau neuronal: Réseau neuronal
CNN est donc un "réseau de neurones convolutifs".
https://www.atmarkit.co.jp/ait/articles/1804/23/news138.html Selon:
Les fichiers image tels que jpg ont un nombre fixe de pixels pour chacun de la largeur et de la hauteur. Par exemple, supposons que vous ayez une photo avec une largeur: 300 px et une hauteur: 200 px. Si un pixel est représenté par ■ (carré) La photo est un tableau de 300 x 200 = 60 000 ■. Donc, si largeur: 5px et hauteur: 5px et qu'il y a un total de 25 ■, ce sera comme indiqué dans la figure ci-dessous.
De plus, dans le cas des photographies en noir et blanc
Ensuite, dans le cas du "dessin x (x) avec des caractères noirs sur fond blanc", ce sera comme le montre la figure ci-dessous.
De même, s'il s'agit d'un signe plus (+),
Et si c'est un signe moins (-),
Et si c'est un symbole égal (=),
Est.
X avec lettres noires sur fond blanc
Que se passe-t-il si vous «examinez les caractéristiques en vous concentrant sur de petites divisions» pour les données d'image? Par exemple, faites attention à la partie entourée par le cadre rouge et le cadre bleu.
Cette zone est tout
Est. En d'autres termes, on peut voir que "la partie de cadre rouge et la partie de cadre bleu ont les mêmes caractéristiques". ici,
"Données montrant des caractéristiques (détecteur de caractéristiques)" telles que
(Parfois appelé filtre. Le sens est le même). En d'autres termes, si vous voulez comprendre les caractéristiques de l'image originale de "5 x 5" L'image originale doit être subdivisée et chacune doit être comparée au noyau "2 x 2". C'est l'idée de "déterminer une image" ou "d'identifier les caractéristiques d'une image ou sa différence avec d'autres images".
Afin de comprendre Conv2D, il est nécessaire de comprendre la "couche de convolution bidimensionnelle". Pour ce faire, nous devons d'abord comprendre la "couche de pliage". Alors, qu'est-ce que le «pliage»?
En gros, c'est comme suit.
Lors de l'exécution d'une convolution sur une image originale 5 x 5 avec un noyau 3 x 3 Décaler de 1 carré (cela s'appelle "foulée (le nombre de pixels à décaler) est de 1") Ensuite, un total de 9 calculs matriciels sera effectué. Par conséquent, si les résultats du calcul sont sortis et organisés, ils seront 9 fois, c'est-à-dire que "la carte des caractéristiques est de 9 carrés".
Le cadre rouge est l'objet à comparer avec le noyau, c'est-à-dire la "zone d'intérêt (appelée fenêtre)". Le calcul de la matrice est répété en décalant d'un carré (1 pixel) du coin supérieur gauche vers le coin inférieur droit de l'image d'origine. Dans ce cas, puisque le calcul est effectué 9 fois, la carte des caractéristiques devient 9 carrés (3 x 3). Il est appelé "stride is 1" pour calculer en décalant un pixel à la fois. Si vous calculez en décalant de 2 pixels, on dit que la foulée est de 2.
Essayons en fait la "première opération de matrice" dans la figure ci-dessus. La procédure de calcul matriciel est la suivante. Le calcul de la matrice est effectué sur la partie à cadre rouge (fenêtre) dans la figure de gauche et la figure de droite (noyau).
Au fait, le noyau mentionné ici n'est qu'un exemple. Dans la convolution réelle, "La taille verticale et horizontale du noyau peut être spécifiée arbitrairement autre que 3x3." Notez également que "non seulement un type de noyau, mais plusieurs types sont utilisés pour le pliage" (les détails seront décrits plus loin).
Eh bien, l'opération de matrice est
En conséquence, le résultat de sortie peut être obtenu. Par souci de clarté, je vais mettre quelques chiffres. ici, Noir -1 1 blanc Et.
De la cellule supérieure gauche à la cellule inférieure droite, le calcul est effectué dans l'ordre (9 fois au total), comme illustré ci-dessous.
-1 x 1 = -1 (multipliez le côté gauche de la rangée supérieure)
1 x 1 =1 (multipliez les centres supérieurs)
1 x 1 =1 (multipliez le côté droit de la rangée supérieure)
1 x -1 = -1 (multipliez le côté gauche de la rangée du milieu)
-1 x -1 =1 (multipliez les centres de la rangée du milieu)
1 x -1 = -1 (multipliez le côté droit de la rangée du milieu)
1 x 1 =1 (multipliez le côté gauche de la rangée du bas)
1 x 1 =1 (multipliez les centres inférieurs)
-1 x 1 = -1 (multipliez les côtés inférieurs droit)
Le côté gauche est "la valeur d'une cellule dans une partie de l'image d'origine", Le côté droit est "la valeur d'une cellule dans le noyau". Et, "ajouter tout" la réponse,
SUM(-1, 1, 1, -1, 1, -1, 1, 1, -1)
Par conséquent, le résultat est 1. Puisque ce 1 est disposé dans le "coin supérieur gauche de la carte des caractéristiques", La carte des caractéristiques est la suivante.
Si vous continuez le calcul de cette manière, les valeurs seront entrées dans les 8 carrés restants de la carte des caractéristiques. Effectuer un tel calcul est un «pliage». En d'autres termes, «la convolution est le travail de calcul de la matrice de l'image originale et du noyau et de sortie du résultat sur la carte des caractéristiques».
Cependant, il est difficile d'effectuer manuellement une telle convolution (calcul matriciel). Par conséquent, il est calculé à l'aide d'une fonction telle que Conv2D de keras.
À propos de l'exemple de code au début.
from keras import layers, models
model = models.Sequential()
model.add(layers.Conv2D(32,(3,3),activation="relu",input_shape=(150,150,3)))
Conv2D () utilisé dans ce
Conv2D(32,(3,3),activation="relu",input_shape=(150,150,3))
Examinez ce que signifie l'argument. Vous passez quatre arguments.
Conv2D(
32,
(3,3),
activation="relu",
input_shape=(150,150,3)
)
documentation officielle de Keras https://keras.io/ja/layers/convolutional/#conv2d La description de est la suivante.
keras.layers.Conv2D(
filters,
kernel_size,
strides=(1, 1),
padding='valid',
data_format=None,
dilation_rate=(1, 1),
activation=None,
use_bias=True,
kernel_initializer='glorot_uniform',
bias_initializer='zeros',
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None
)
Commençons par le premier argument. La description du document officiel est la suivante.
filters :Un entier, la dimension de l'espace de sortie (c'est-à-dire le nombre de filtres de sortie dans la convolution).
Dans ce code, nous passons 32. En d'autres termes, "le nombre de filtres de sortie est de 32" est spécifié. Alors, qu'est-ce qu'un "filtre de sortie"?
"Qu'est-ce qu'un noyau?" En convolution a été mentionné ci-dessus. Il est important de savoir que le "noyau" est parfois appelé "filtre" ici. En d'autres termes, le premier argument, les filtres, est un "filtre" et un "noyau". Vous pouvez voir qu'il s'agit d'une valeur de paramètre liée au noyau.
https://qastack.jp/stats/154798/difference-between-kernel-and-filter-in-cnn Ensuite, les questions et réponses suivantes sont faites.
Question: Quelle est la différence entre un "noyau" et un "filtre" dans un réseau neuronal convolutif?
Réponse: Cela a la même signification. Le noyau est parfois appelé filtre.
Par conséquent, en conclusion
Sera.
Si tel est le cas, "le nombre de filtres de sortie est de 32" signifie "le nombre de noyaux de sortie est de 32".
Image d'entrée 5x5
D'autre part, filtre 3x3 (également appelé noyau)
Lors du repliage. Si vous calculez en décalant un carré à la fois comme indiqué dans la figure ci-dessous, la réponse (carte des caractéristiques) sera de 9 carrés (3x3) car le calcul sera effectué 9 fois au total.
(À propos, un tel pliage qui glisse un par un est exprimé par "la foulée est de 1". Plus la valeur de la foulée est élevée, moins il y a de calculs)
Combien de carrés voulez-vous décaler et calculer? La valeur bâclée.
Si la foulée est de 1
Sera.
Si la foulée est de 2
Sera.
Alors, quelles sont les dimensions verticales et horizontales de la carte d'entités lorsqu'elle est pliée dans les conditions suivantes?
La réponse est 11 x 11. Vous pouvez le comprendre en écrivant une grille sur une feuille de calcul, etc. et en comptant tout en la déplaçant à la main. Il y a 25 x 25 carrés. Ceci est utilisé comme image d'entrée. Le cadre rose qui se chevauche (5x5) est le filtre (noyau). Puisque la foulée est de 2, nous calculerons en décalant de 2 carrés. Vous atteindrez la bonne extrémité dans le 11e calcul. Puisque la verticale est la même, la carte des caractéristiques est de 11 x 11.
Sur la base des connaissances ci-dessus, considérez les paramètres requis pour exécuter la convolution. Plus précisément, il est nécessaire de répondre aux questions suivantes.
Il peut y avoir d'autres questions, mais la réponse à ces questions est de "déterminer la valeur de l'argument à passer à la fonction".
https://child-programmer.com/ai/keras/conv2d/ Extrait de la description de.
Conv2D(16, (3, 3)Commentaire
: Signifie utiliser 16 filtres de taille "3x3" (16 types de filtres "3x3").
Il semble que les nombres impairs qui peuvent déterminer le centre, tels que «5x5» et «7x7», soient faciles à utiliser.
Il semble que le nombre de filtres ait tendance à être "16, 32, 64, 128, 256, 512" etc.
Il semble essayer un grand nombre de filtres pour des problèmes qui semblent compliqués, et un petit nombre de filtres pour des problèmes qui semblent faciles.
Ici, la valeur liée au filtre est
Quand
Attention à ne pas le confondre. Les tailles verticales et horizontales sont comme expliqué jusqu'ici. Dans l'exemple ci-dessous, la taille verticale et horizontale du filtre est de "5 x 5" (la zone rose est un carré de 5 x 5 = 25 pixels).
Alors que signifie "le nombre de filtres (combien? Ce nombre)"? Il existe plus d'un type de filtre pour effectuer la convolution. «Un type» indique seulement «une caractéristique». Par exemple, si vous avez un filtre 3x3, le type de filtre est, par exemple.
Etc. Il s'agit du "type de filtre" et du "nombre de filtres", c'est-à-dire du "nombre de filtres".
Sommaire,
Conv2D(16, (3, 3)
"Pliez en utilisant 16 (16 types) filtres avec 3x3 pixels verticaux et horizontaux." Est la commande.
Si vous souhaitez en savoir plus sur la signification de "pliage avec plusieurs filtres, par exemple 16 types (16 feuilles)" https://products.sint.co.jp/aisia/blog/vol1-16 Voir «Couche convolutionnelle» dans. Ce qui suit est un extrait.
"Le nombre de cartes d'entités générées autant que le nombre de filtres" signifie Après pliage avec 16 types (16 feuilles) de filtres, Cela signifie que 16 "cartes de caractéristiques" sont produites.
Ici par souci de simplicité Prenons le cas du "confolding avec trois filtres".
Par exemple, dans la figure ci-dessous, le filtre (zone rose) est 2x2. La carte des caractéristiques (zone verte) est de 3x3.
S'il n'y a qu'un seul type de filtre (zone rose) Une seule carte des caractéristiques (zone verte) est sortie.
Cependant, si vous préparez trois types de filtres, Parce que chaque type effectue un calcul matriciel Étant donné que chaque carte d'entités a des résultats différents, trois cartes d'entités sont produites.
Exemple de code au début
from keras import layers, models
model = models.Sequential()
model.add(layers.Conv2D(32,(3,3),activation="relu",input_shape=(150,150,3)))
ensuite
Conv2D(32,(3,3)
c'est écrit comme ça. Il s'agit d'une commande pour "plier en utilisant 32 types (32 feuilles) de filtres 3x3 (noyaux)".
Au dessus,
J'ai compris comment décider de la réponse à (comment passer l'argument).
Continuer à
Considérer.
https://child-programmer.com/ai/keras/conv2d/ Ce qui suit est un extrait de.
input_shape=(28, 28, 1)Commentaire
: Une échelle de gris (image en noir et blanc) avec 28 pixels verticalement et 28 pixels horizontalement est entrée.
En d'autres termes, dans l'exemple de code au début
input_shape=(150,150,3)
Si "Les pixels verticaux et horizontaux de l'image d'entrée sont de 150 x 150" Sera. Alors, que signifie 3?
Documentation officielle https://keras.io/ja/layers/convolutional/#conv2d À
Entrée dans l'image RVB_shape=(128, 128, 3)Il devient.
une.
1 pour les images en noir et blanc 3 pour RVB
Par conséquent, il est considéré comme le nombre de couleurs (3 types de rouge, vert et bleu pour RVB). S'il s'agit d'une photo normale (.jpg), c'est RVB, donc si vous définissez 3, il n'y aura pas de problème.
Exemple de code
model.add(layers.Conv2D(32,(3,3),activation="relu",input_shape=(150,150,3)))
Écrit en
activation="relu"
Que fait
https://child-programmer.com/ai/keras/conv2d/ L'explication est ci-dessous.
activation=Explication de relu
: Fonction d'activation "ReLU (Rectified Linear Unit)"-Fonction de rampe ".
Effectué sur l'image filtrée. La sortie est 0 lorsque l'entrée est égale ou inférieure à 0. Si l'entrée est supérieure à 0, elle est sortie telle quelle.
https://keras.io/ja/layers/convolutional/#conv2d L'explication est ci-dessous.
activation:Nom de la fonction d'activation à utiliser (voir activations)
Si rien n'est spécifié, aucune activation ne sera appliquée
En d'autres termes activation="relu" Est une instruction pour "utiliser ReLU comme fonction d'activation".
La fonction d'activation est la "fonction d'activation". Alors, qu'est-ce que «l'activation»? Vous trouverez ci-dessous une collection de contextes pour comprendre l'activation.
Sommaire, "Si vous spécifiez la fonction d'activation, la puissance expressive du modèle augmentera (vous pouvez faire une IA intelligente), alors spécifions la fonction d'activation." Et "ReLU est utilisé en standard, n'est-ce pas?"
Mais c'est
strides = 1
Spécifiez comme. Le détail est https://keras.io/ja/layers/convolutional/#conv2d Voir.
Comme mentionné ci-dessus
model.add(layers.Conv2D(32,(3,3),activation="relu",input_shape=(150,150,3)))
Qu'est-ce que tu fais? Que signifie chaque argument? Je pourrais comprendre à peu près. Puisque le but de ce chapitre est "Comprendre keras Conv2D (2D Convolution Layer)" Une fois ici. Nous étudierons Sequential () et MaxPooling2D () dans un autre chapitre.
Recommended Posts