[PYTHON] CNN (1) pour la classification des images (pour les débutants)

Bien qu'il ne soit pas traité dans la pratique, il est enregistré comme apprentissage. Cette fois, le réseau de neurones convolutifs (CNN) Il semble efficace pour l'analyse de reconnaissance d'image ...

CNN Le fait est qu'il existe une couche de convolution et une couche de regroupement en plus du réseau neuronal normal.

Plier

La partie la plus importante de la conversion des fonctionnalités en données à partir d'images. Les données d'image sont des données 5x5x1. Définissez la pondération dans le noyau 3x3x3 et calculez tous les modèles. 9 motifs dans la figure ci-dessous. Le résultat est appelé une carte des caractéristiques. スクリーンショット 2020-01-31 8.35.35.png

mise en commun

La mise en commun est une méthode permettant de réduire une grande image tout en laissant des informations importantes. En conséquence, la dimension des données peut être réduite, la vitesse de calcul peut être supprimée et l'apprentissage peut se poursuivre. スクリーンショット 2020-01-31 8.56.07.png Il existe deux types ・ Mise en commun maximale → Définir la valeur maximale dans le noyau ・ Mise en commun moyenne → Calculer la valeur moyenne de tous les nombres du noyau

Réduction spécifique de la dimension des données (= méthode de compression)

En pliant, le nombre de dimensions est réduit (= compressé) en calculant les données d'image dans la taille du noyau et en extrayant une nouvelle quantité de fonctionnalités. La formule est la suivante. スクリーンショット 2020-03-08 16.15.06.png En mutualisant, les données sont compressées tout en mettant l'accent sur les fonctionnalités. La méthode consiste à calculer la valeur maximale dans le noyau ou la valeur moyenne.

Déplacer l'échantillon

Utilisez le jeu de données MNIST.

%matplotlib inline
import keras
from keras.datasets import mnist
import matplotlib.pyplot as plt

#Lisez les données. Divisé en données d'entraînement et données d'entraînement
(x_train, y_train), (x_test, y_test) = mnist.load_data()

#Affichage des données MNIST
fig = plt.figure(figsize=(9, 9))
fig.subplots_adjust(left=0, right=1, bottom=0, top=0.5, hspace=0.05, wspace=0.05)
for i in range(81):
    ax = fig.add_subplot(9, 9, i + 1, xticks=[], yticks=[])
    ax.imshow(x_train[i].reshape((28, 28)), cmap='gray')

Ça sort comme ça. スクリーンショット 2020-04-16 8.29.36.png


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
img_rows, img_cols = 28, 28

(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')

y_train = y_train.astype('int32')
y_test = y_test.astype('int32')
y_train = keras.utils.np_utils.to_categorical(y_train, num_classes)
y_test =  keras.utils.np_utils.to_categorical(y_test, num_classes)

#La partie qui va du pliage à la mise en commun
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))

Résumé

L'image conceptuelle était organisée.

référence

[Mécanisme du réseau neuronal convolutif] (https://postd.cc/how-do-convolutional-neural-networks-work/) [Qu'est-ce qu'un réseau neuronal convolutif souvent utilisé dans le traitement d'image] (https://kenyu-life.com/2019/03/07/convolutional_neural_network/)

Recommended Posts

CNN (1) pour la classification des images (pour les débutants)
Défiez la classification des images avec TensorFlow2 + Keras CNN 1 ~ Bougez pour le moment ~
Principes de base de la technologie de reconnaissance d'image (pour les débutants)
Paramètres Spacemacs (pour les débutants)
Manuel python pour les débutants
Principes de base de la reconnaissance d'image CNN 1
Algorithme Dikstra pour les débutants
OpenCV pour les débutants en Python
Caffe Model Zoo pour les débutants [Classification selon l'âge et le sexe]
Recherche approximative du voisin le plus proche pour une analyse d'image similaire (pour les débutants) (1)
[PyTorch] Classification des images du CIFAR-10
J'ai essayé la classification d'image d'AutoGluon
Flux d'apprentissage pour les débutants en Python
[Pour les débutants] kaggle exercice (merucari)
Distribution Linux recommandée pour les débutants
Courbe ROC pour la classification multi-classes
Construction de l'environnement Python3 (pour les débutants)
Application de la reconnaissance d'image CNN2
Vue d'ensemble de Docker (pour les débutants)
Python #function 2 pour les super débutants
Les bases de Seaborn pour les débutants ④ Pairplot
Grammaire de base Python pour les débutants
Pandas 100 coups pour les débutants en Python
Python #function 1 pour les super débutants
#List Python pour les super débutants
~ Conseils pour les débutants de Python présentés avec amour par Pythonista ③ ~
[Pour les débutants de Kaggle] Titanic (LightGBM)
Mémorandum de commande Linux [pour les débutants]
[Python] Accès et recadrage des pixels d'image à l'aide d'OpenCV (pour les débutants)
Raccourci Linux pratique (pour les débutants)
Challenge classification des images par TensorFlow2 + Keras 1-Move pour le moment-
[Explication pour les débutants] Tutoriel TensorFlow MNIST (pour les débutants)
Principes de base de Pandas pour les débutants ① Lecture et traitement
Traduction TensorFlow MNIST pour les débutants en ML
Arbre de décision (pour les débutants) -Édition de code-
Principes de base de Pandas pour les débutants ⑧ Traitement des chiffres
Exercices Python pour les débutants # 2 [pour instruction / instruction while]
Python pour les super débutants Super débutants Python # dictionnaire type 1
Bases de Seaborn pour les débutants ② histogramme (distplot)
[Pour les débutants] Django -Construction d'environnement de développement-
[Pour les débutants] Script en 10 lignes (1.folium)
Retour logistique (pour les débutants) -Code Edition-
Qu'est-ce que le grattage? [Résumé pour les débutants]
Notes personnelles pour le traitement d'images python
Python #index pour les super débutants, tranches
Image de conteneur recommandée pour les applications Python
Classification d'images avec un jeu de données d'images de fond d'oeil grand angle
<Pour les débutants> bibliothèque python <Pour l'apprentissage automatique>
Tutoriel TensorFlow MNIST pour les débutants en ML
Commandes Linux fréquemment utilisées (pour les débutants)
[À voir pour les débutants] Bases de Linux
Fonction Python #len pour les super débutants
Web scraping pour les débutants en Python (1)
Reconnaissance vocale: Classification des genres Part2-Classification des genres musicaux CNN
Exécutez unittest en Python (pour les débutants)
Qu'est-ce que xg boost (1) (pour les débutants)
Web scraping pour les débutants en Python (4) -1
Python #Hello World pour les super débutants