[PYTHON] Comprendre le nombre de paramètres d'entrée / sortie du réseau neuronal convolutif

Apprendre en gros avec keras et python

Ce que j'ai appris

  1. Comprendre le nombre de paramètres d'entrée / sortie de la couche
  2. Comprendre le traitement des données après le traitement de la couche de convolution et de la couche de pooling

Code utilisé pour l'apprentissage

Code pour mnist cnn dans la documentation de keras.

from __future__ import print_function
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K

batch_size = 128
num_classes = 10
epochs = 12

# input image dimensions
img_rows, img_cols = 28, 28

# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

if K.image_data_format() == 'channels_first':
    x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
    x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
    input_shape = (1, img_rows, img_cols)
else:
    x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
    x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
    input_shape = (img_rows, img_cols, 1)

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

Quelle était la question

La chose la plus discutable est le nombre de dimensions d'entrée / sortie. Le résultat de model.summary est affiché ci-dessous. Il y a deux choses que je me suis demandé ici.

  1. "D'où vient la première couche 26, 26, 32 même si les données Mnist sont des données d'image 28 * 28?"
  2. "Qu'est-ce que Conv2D 32?"
Model: "sequential_2"


_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_3 (Conv2D)            (None, 26, 26, 32)        320       
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 24, 24, 64)        18496     
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 12, 12, 64)        0         
_________________________________________________________________
dropout_3 (Dropout)          (None, 12, 12, 64)        0         
_________________________________________________________________
flatten_2 (Flatten)          (None, 9216)              0         
_________________________________________________________________
dense_3 (Dense)              (None, 128)               1179776   
_________________________________________________________________
dropout_4 (Dropout)          (None, 128)               0         
_________________________________________________________________
dense_4 (Dense)              (None, 10)                1290      
=================================================================
Total params: 1,199,882
Trainable params: 1,199,882
Non-trainable params: 0

Ce que j'ai trouvé

32 de la fonction Conv2D indique le nombre de filtres. En d'autres termes, diverses extractions de bords sont effectuées à l'aide de 32 types de filtres. En outre, en effectuant le calcul du filtre comme pas 1, l'image est réduite d'une taille et l'image est réduite de 2 points dans chacune des directions verticale et horizontale. Puisqu'il y a une sortie pour chaque filtre, il y a 32 sorties. De plus, contrairement à la couche de pliage, la couche de regroupement ne gère pas les points qui se chevauchent, de sorte que le nombre de sorties est considérablement réduit. (En passant, le nombre d'entrées et de sorties ne change pas car la couche d'exclusion ne définit la valeur qu'à 0)

Vérifier suivant

  1. La valeur spécifique du filtre. Visualisation

Recommended Posts

Comprendre le nombre de paramètres d'entrée / sortie du réseau neuronal convolutif
Visualisez la couche interne du réseau neuronal
L'histoire de la création d'un réseau neuronal de génération musicale
Implémentation d'un réseau de neurones convolutifs utilisant uniquement Numpy
Implémentation d'un réseau de neurones à deux couches 2
Touchez l'objet du réseau neuronal
Créez un classificateur avec un taux de reconnaissance de l'écriture manuscrite de 99,2% à l'aide du réseau neuronal convolutif TensorFlow
Trouvez le nombre de jours dans un mois
Sortie sous la forme d'un tableau python
[NNabla] Comment obtenir la sortie (variable) de la couche intermédiaire du réseau construit
[Python] Un programme qui compte le nombre de vallées
Un mémorandum sur les avertissements dans les résultats de sortie de pylint
Un mémo pour comprendre visuellement l'axe des pandas.
Implémenter un réseau neuronal convolutif
Bases de PyTorch (2) -Comment créer un réseau de neurones-
Afficher le résultat de sortie de sklearn.metrics.classification_report sous forme de fichier CSV
Comprendre le nombre de paramètres d'entrée / sortie du réseau neuronal convolutif
Implémentation d'un réseau de neurones à deux couches 2
Visualisez la couche interne du réseau neuronal
Avec une légère baisse de précision, les paramètres de poids ont été incroyablement réduits ~ Résultats surprenants de CNN ~
Comment dessiner facilement la structure d'un réseau de neurones sur Google Colaboratory à l'aide de "convnet-tiroir"
J'ai essayé un réseau de neurones convolutifs (CNN) avec un tutoriel TensorFlow sur Cloud9-Classification des images manuscrites-
Un diagramme de réseau a été créé avec les données du COVID-19.
Construction d'un réseau neuronal qui reproduit XOR par Z3
Série d'accélération CNN ~ FCNN: Introduction du réseau neuronal convolutif de Fourier ~
Implémenter un réseau neuronal à 3 couches
10. Compter le nombre de lignes
Obtenez le nombre de chiffres
Calculez le nombre de changements
4. Entourez les paramètres avec un réseau neuronal!
Filtrer la sortie de tracemalloc
Résumons les fonctions de base de TensorFlow en créant un réseau neuronal qui apprend les portes XOR.
Lire la sortie standard d'un sous-processus ligne par ligne en Python
Django: fait varier le nombre de formulaires enfants en fonction du nombre d'éléments d'entrée
Comment afficher le résultat de sortie de la commande man Linux dans un fichier
Une commande pour vérifier facilement la vitesse du réseau sur la console
[python] Une note que j'ai commencé à comprendre le comportement de matplotlib.pyplot
[NNabla] Comment supprimer le niveau intermédiaire d'un réseau prédéfini
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
Obtenez le nombre de vues de Qiita
Comprendre le contenu du pipeline sklearn
J'ai essayé de mettre en œuvre un réseau de neurones à deux couches
Obtenez le nombre d'abonnés Youtube
L'histoire de l'exportation d'un programme
[Python] Un programme qui calcule le nombre de segments de chocolat qui remplissent les conditions
[Python] Un programme qui calcule le nombre de chaussettes jumelées
Générez une liste contenant le nombre de jours du mois en cours.
Vérifions la chaîne d'octets en mémoire du nombre flottant flottant en Python
J'ai essayé d'améliorer la précision de mon propre réseau neuronal
Comment mettre un numéro de ligne au début d'un fichier CSV
Comment lire une vidéo tout en regardant le nombre d'images (Mac)
Création d'un modèle de discrimination d'image (cifar10) à l'aide d'un réseau neuronal convolutif
Nous avons évalué l'effet de la modification des paramètres du réseau neuronal multicouche (Keras) sur la valeur de la fonction de perte (sujet: classification MNIST)
Le résultat était meilleur lorsque les données d'apprentissage du mini-lot ont été faites un hybride de fixe et aléatoire avec un réseau de neurones.
J'ai essayé de comprendre attentivement la fonction d'apprentissage dans le réseau de neurones sans utiliser la bibliothèque d'apprentissage automatique (première moitié)