[PYTHON] Introduction au Deep Learning pour la première fois (Chainer) Reconnaissance de caractères japonais Chapitre 2 [Génération de modèles par apprentissage automatique]

Bonjour Licht. Suivant ici, Tutoriel Deep Learning Chapitre 2 Décrit la génération d'un modèle de prédiction Deep Learning par machine learning. J'expliquerai comment le réseau neuronal effectue spécifiquement l'apprentissage automatique dans un chapitre ultérieur. Ici, nous allons introduire une utilisation pratique.

Préparation

Tout d'abord, téléchargez le code source de ce Github et placez le tout sous hiraganaNN.py dans le même répertoire que l'ensemble de données d'image précédent. Le chapitre 2 utilise hiraganaNN.py, dataArgs.py, hiragana_unicode.csv.

Courir

Après avoir déplacé vers le répertoire HIRAGANA_NN dans le terminal (invite de commande)

python hiraganaNN.py

Commencer avec.

Cela va démarrer l'apprentissage automatique avec Deep Learning, mais cela prendra du temps à apprendre, donc je vais vous expliquer un peu en attendant. Dans le répertoire HIRAGANA_NN, des images (110 * 110 pixels) divisées en répertoires sont stockées pour chaque plat et pseudonyme. Par exemple, dans le répertoire 305e, les images du pseudonyme plat "Zo" sont enregistrées dans diverses polices et manuscrites comme suit. zo_directory.png

Quel est le but de l'apprentissage automatique en général, à partir de diverses images «zo»? C'est une tentative pour apprendre cela. En d'autres termes, ce sont "zo" (apprentissage) zozozo.png

C'est "Zo", n'est-ce pas? Je veux faire quelque chose (appelé identification / prédiction / reconnaissance). 305e_12382_reikofont.png

Cela semble facile, mais comme la machine est simple, nous faisons des erreurs auxquelles les humains ne s'attendraient pas. Par exemple, j'ai appris "Zo" ci-dessus. Donc le fond n'est pas "Zo"! Kippari rotate_zo.png

(Parce qu'il est un peu incliné) Les erreurs (détérioration de la polyvalence) dues à un tel apprentissage excessif (autres que les «zo» ci-dessus ne sont pas reconnus comme «zo») sont appelées «surapprentissage». De plus, la détérioration de l'efficacité d'apprentissage, qui rend l'apprentissage difficile dans des endroits qui ne sont pas liés à l'origine à la reconnaissance de la couleur et de la densité des caractères, est également une cause de détérioration des performances. colorful_zo.png

Effectue un "prétraitement" pour éviter une dégradation des performances telle qu'un surapprentissage et une détérioration de l'efficacité de l'apprentissage. Il existe différents prétraitements, mais l'expansion des données (rotation, mouvement, distorsion élastique, bruit, etc.) (quoi qu'il arrive si vous apprenez différents "zo"!), various_zo.png

Un exemple est la normalisation des données (échelle de gris, blanchiment, normalisation par lots, etc.) qui simplifie le problème et améliore l'efficacité de l'apprentissage.

Aperçu du code source

Dès la première ligne

unicode2number = {}
import csv
train_f = open('./hiragana_unicode.csv', 'rb')
train_reader = csv.reader(train_f)
train_row = train_reader
hiragana_unicode_list = []
counter = 0
for row in train_reader:
    for e in row:
        unicode2number[e] = counter
        counter = counter + 1

Ici, chaque pseudonyme plat est numéroté. Celui avec unicode 304a (o) est le numéro 0, celui avec 304b (ou) est le numéro 1, et ainsi de suite. prochain

files = os.listdir('./')
for file in files:
    if len(file) == 4:
        #Répertoire de pseudonymes plat
        _unicode = file
        imgs = os.listdir('./' + _unicode + '/')
        counter = 0
        for img in imgs:
            if img.find('.png') > -1:
                if len(imgs) - counter != 1:
                ...

Ici, l'image en tant que données d'entrée (données d'apprentissage) est lue. Chargez uniquement la dernière image de chaque répertoire à des fins de test. Lors de la lecture

x_train.append(src)
y_train.append(unicode2number[_unicode])

Les données d'image sont stockées dans x_train (x_test), et l'étiquette de réponse correcte (0-83) est stockée dans y_train (y_test). La partie suivante consiste à agrandir les données pour une image de données d'entrée

for x in xrange(1, 10):
    dst = dargs.argumentation([2, 3])
    ret, dst = cv2.threshold(
        dst, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    x_train.append(dst)
    y_train.append(unicode2number[_unicode])

Ici, il est déplacé et tourné au hasard pour l'étendre à 10 feuilles. Quelques arguments d'arguments ([2, 3]) sont terriblement difficiles à comprendre, mais dans l'ordre 2: rotation (rotation avec une profondeur tridimensionnelle) et 3: mouvement, le processus de mouvement est effectué après le processus de rotation. C'est donné. De chaque annuaire

prochain

x_train = np.array(x_train).astype(np.float32).reshape(
    (len(x_train), 1, IMGSIZE, IMGSIZE)) / 255
y_train = np.array(y_train).astype(np.int32)

L'image en échelle de gris a une valeur de pixel de 0 à 255, mais elle est normalisée à une valeur de 0 à 1 en la divisant par 255. Ce processus améliore l'efficacité de l'apprentissage.

Ce qui précède est la préparation des données d'entraînement (x_train, y_train), mais la préparation du test (x_test, y_test) se fait également de la même manière. Ici, nous allons lire le dernier de chaque répertoire pour le tester et vérifier l'exactitude du modèle entraîné par machine. L'image de test est également agrandie et lue, mais la raison en est écrite autour du chapitre 7.

Ce qui suit est une structure concrète du Deep Learning, donc je résumerai l'explication dans un chapitre ultérieur.

Résultat d'apprentissage

Ce faisant, les progrès de l'apprentissage automatique sont apparus dans le terminal.

('epoch', 1)
COMPUTING...
train mean loss=3.53368299341, accuracy=0.161205981514
test mean loss=1.92266467359, accuracy=0.506097565337
('epoch', 2)
COMPUTING...
train mean loss=1.66657279936, accuracy=0.518463188454
test mean loss=1.0855880198, accuracy=0.701219529277
.
.(Un avertissement apparaîtra, mais vous pouvez l'ignorer pour le moment.)
('epoch', 16)
COMPUTING...
train mean loss=0.198548029516, accuracy=0.932177149753
test mean loss=0.526535278777, accuracy=0.844512195849
.
.
('epoch', 23)
COMPUTING...
train mean loss=0.135178960405, accuracy=0.954375654268
test mean loss=0.686121761981, accuracy=0.814024389154

Considérez la perte comme l'erreur entre la sortie prédite par Deep Learning et la bonne réponse. la précision est le pourcentage de bonnes réponses En apprentissage automatique, l'objectif est de réduire la perte de données de test.

Au fur et à mesure que l'apprentissage progresse, la perte de train et de test diminuera, mais la perte de train diminuera après l'époque 16. Le surapprentissage a tendance à augmenter la perte de test. Lorsque cela se produit, l'apprentissage se termine car c'est la limite. Pour le moment, la perte de test = 0,526 de l'époque 16 donne le meilleur résultat dans ce modèle. (Les efforts pour améliorer cette précision seront discutés dans un chapitre ultérieur)

Étant donné que le résultat d'apprentissage du Deep Learning de chaque époque est enregistré dans le même répertoire que le code source, Enregistrez un fichier appelé «modèle 16» qui a donné les meilleurs résultats. (Vous pouvez supprimer d'autres fichiers de modèle) models.png

Dans le prochain chapitre 3, nous ferons des prédictions réelles en utilisant ce modèle.

chapitre Titre
Chapitre 1 Construire un environnement Deep Learning basé sur le chainer
Chapitre 2 Création d'un modèle de prédiction Deep Learning par Machine Learning
chapitre 3 Reconnaissance de caractères à l'aide d'un modèle
Chapitre 4 Amélioration de la précision de la reconnaissance en élargissant les données
Chapitre 5 Introduction à Neural Net et explication du code source
Chapitre 6 Amélioration de l'efficacité d'apprentissage en sélectionnant Optimizer
Chapitre 7 TTA,Amélioration de l'efficacité de l'apprentissage par la normalisation des lots

Recommended Posts

Introduction au Deep Learning pour la première fois (Chainer) Reconnaissance de caractères japonais Chapitre 2 [Génération de modèles par apprentissage automatique]
Introduction au Deep Learning pour la première fois (Chainer) Reconnaissance de caractères japonais Chapitre 3 [Reconnaissance de caractères à l'aide d'un modèle]
Introduction au Deep Learning pour la première fois (Chainer) Reconnaissance des caractères japonais Chapitre 1 [Construction de l'environnement]
Introduction au Deep Learning pour la première fois (Chainer) Reconnaissance de caractères japonais Chapitre 4 [Amélioration de la précision de la reconnaissance en développant les données]
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 10 Introduction à Cupy
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 9 Introduction à scikit-learn
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer jusqu'à la fin du chapitre 2
GTUG Girls + PyLadiesTokyo Meetup Je suis allé au premier machine learning
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer du chapitre 2
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 7 Analyse de régression
[Apprentissage de renforcement d'introduction] Renforcement de l'apprentissage pour bouger pour le moment
Avant l'introduction à l'apprentissage automatique. ~ Technologie requise pour l'apprentissage automatique autre que l'apprentissage automatique ~
Une introduction à OpenCV pour l'apprentissage automatique
Une introduction à Python pour l'apprentissage automatique
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 13 Formation sur les réseaux neuronaux ~ Chainer terminé
[Introduction à l'apprentissage automatique] Jusqu'à ce que vous exécutiez l'exemple de code avec chainer
Prenons la version gratuite "Introduction à Python pour l'apprentissage automatique" en ligne jusqu'au 27/04
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 13 Bases du réseau neuronal
À propos de l'itinéraire le plus court pour créer un modèle de reconnaissance d'image par apprentissage automatique et mettre en œuvre une application Android
Introduction au Deep Learning (1) --Chainer est expliqué d'une manière facile à comprendre pour les débutants-
Une introduction à l'apprentissage automatique pour les développeurs de robots
Comment utiliser MkDocs pour la première fois
Retour sur le concours d'apprentissage automatique sur lequel j'ai travaillé pour la première fois
J'ai essayé de prédire l'évolution de la quantité de neige pendant 2 ans par apprentissage automatique
Implémentation du modèle Deep Learning pour la reconnaissance d'images
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitres 11 et 12 Introduction à Pandas Matplotlib
[Pour les débutants] Introduction à la vectorisation dans l'apprentissage automatique
Essayez de publier sur Qiita pour la première fois
La première étape de l'apprentissage automatique ~ Pour ceux qui veulent essayer l'implémentation avec python ~
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer chapitres 1 et 2
Introduction à l'apprentissage automatique
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
Si vous apprenez Linux pour la première fois, faites-le!
Premier Kaggle (kaggle ①)
Prétraitement japonais pour l'apprentissage automatique
Chapitre 7 [Neural Network Deep Learning] P252 ~ 275 (première moitié) [Apprenez en vous déplaçant avec Python! Nouveau manuel d'apprentissage automatique]
Une introduction à l'apprentissage automatique
Kaguru pour la première fois
Introduction au Deep Learning ~ Règles d'apprentissage ~
Apprentissage par renforcement profond 1 Introduction au renforcement de l'apprentissage
Super introduction à l'apprentissage automatique
Introduction au Deep Learning ~ Rétropropagation ~
Différences que les ingénieurs C # ont ressenties lors de l'apprentissage de Python pour la première fois
Apprentissage automatique avec docker (42) Programmation PyTorch pour l'apprentissage en profondeur par Ian Pointer
[Apprentissage automatique] Je vais vous expliquer en essayant le cadre d'apprentissage profond Chainer.
Comment utiliser l'apprentissage automatique pour le travail? 01_ Comprendre l'objectif de l'apprentissage automatique
Introduction au Deep Learning (2) - Essayez votre propre régression non linéaire avec Chainer-
Gestion des modèles d'apprentissage automatique pour éviter de se quereller avec le côté commercial
Résumé des pages utiles pour étudier le framework d'apprentissage profond Chainer
Divulguer le savoir-faire qui a créé un service de recherche d'images similaire pour les actrices audiovisuelles grâce à l'apprentissage profond par chainer
"Introduction à l'apprentissage automatique par inférence bayésienne" Inférence approximative du modèle mixte de Poisson implémenté uniquement avec Python numpy
Introduction à la rédaction de notes d'apprentissage automatique
Introduction à l'apprentissage profond ~ Préparation au codage ~
Présentation de la bibliothèque d'apprentissage automatique SHOGUN
Voir python pour la première fois
Implémentation du modèle de reconnaissance d'images d'apprentissage en profondeur 2
Démarrez Django pour la première fois
Introduction au Deep Learning ~ Dropout Edition ~