[PYTHON] 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]

Bonjour Licht. Suivant ici, Tutoriel Deep Learning Chapitre 4 Je parlerai de l'amélioration de la précision de la reconnaissance en élargissant les données.

Amélioration de la précision de la reconnaissance

La dernière fois (chapitre 3), la perte de 0,526 à l'époque 16 était le meilleur score. Cependant, ce n'est pas bon car il est rarement mal reconnu, même en version imprimée.

Cependant, même si vous en apprenez plus tel quel, seule la perte de train diminuera et la perte de test continuera d'augmenter. Un "surapprentissage" se produira et la précision de la reconnaissance ne s'améliorera pas. Afin d'éviter le surapprentissage et d'améliorer la précision, augmentons les données d'apprentissage.

Il est idéal d'augmenter les données d'entraînement d'origine, mais il faut du temps et de l'argent pour collecter les données d'entraînement, nous allons donc étendre les données.

Expansion des données

À propos des types d'expansion de données

1. Tourner, déplacer, agrandir / réduire, binariser

rotation.png transition.png
  1. Elastic Distortion Expansion des données en donnant une distorsion artificielle.
distortion.png ### 3. Bruit Bruit d'imprus, bruit gaussien, etc. ![impulse.png](https://qiita-image-store.s3.amazonaws.com/0/110732/fd8ea417-d928-ea39-253d-2ff42af9e3a1.png)

4. Amincissement

Amincissement pour éliminer la dépendance de la reconnaissance à l'épaisseur des caractères thinning.png

5. Inverser

Normalement, l'image inversée n'est pas entrée, donc cela semble être une expansion de données défavorable à première vue, mais elle est efficace du point de vue de TTA (expansion de données même pendant les tests).

flip.png

Résultats de la pratique

La rotation utilise des nombres aléatoires tels que l'angle de rotation et l'axe de rotation (tridimensionnel), et le mouvement utilise des nombres aléatoires tels que le nombre de pixels en mouvement, il existe donc un nombre infini de combinaisons d'expansion des données. Je vais y arriver. Le nombre de feuilles agrandies et le résultat sont les suivants.

Numéro agrandi test de perte meilleur score
10 feuilles 0.526
100 feuilles 0.277
300 feuilles 0.260
500 feuilles 0.237

Quelque chose est léger, mais ça fait du bien. Les données ne sont-elles pas dupliquées lorsqu'elles sont agrandies à 500 feuilles? Je pense, mais à la fin c'est OK.

À propos, la distorsion élastique ressemble à un élargissement idéal des données, mais elle est en fait difficile à gérer car elle prend du temps à traiter et provoque un surapprentissage (histoire d'expérience).

Agrandir et tester

Même avec 500 feuilles, la précision augmente régulièrement (la perte diminue), alors j'ai ensuite essayé de passer à ** 3500 feuilles **. (Cependant, comme il y a une limite en termes de mémoire et de temps de traitement (sur mon PC), elle est limitée à seulement 5 feuilles, «A», «I», «U», «E» et «O».)

('epoch', 1)
train mean loss=0.167535232874, accuracy=0.937596153205
test mean loss=0.23016545952, accuracy=0.914285708447
('epoch', 2)
train mean loss=0.0582337708299, accuracy=0.979920332723
test mean loss=0.132406316127, accuracy=0.955102039843
('epoch', 3)
train mean loss=0.042050985039, accuracy=0.985620883214
test mean loss=0.0967423064653, accuracy=0.959183678335
('epoch', 4)
train mean loss=0.0344518882785, accuracy=0.98846154267
test mean loss=0.0579228501539, accuracy=0.983673472794

Le résultat ressemble à ceci. La perte est tombée à 0,057 à l'époque 4. Comme mentionné au chapitre 3, je pourrais en quelque sorte reconnaître l'hiragana manuscrit avec le modèle de perte 0,237, donc je peux m'y attendre cette fois. Par conséquent, j'ai écrit 50 feuilles de hiragana à portée de main et testé la précision. tegaki_aiueo.png

Cette fois, le résultat de la reconnaissance est évalué après avoir étendu les données à 30 feuilles au moment du test. (Il n'y a pas de raison particulière à ce "30 feuilles")

$ python AIUEONN_predictor.py --model loss0057model --img ../testAIUEO/o0.png 
init done 
Numéro de neurone candidat:4, Unicode:304a,Hiragana:Oh
.
.(Omis)
.
Numéro de neurone candidat:4, Unicode:304a,Hiragana:Oh
Numéro de neurone candidat:4, Unicode:304a,Hiragana:Oh
Numéro de neurone candidat:3, Unicode:3048,Hiragana:e
Numéro de neurone candidat:4, Unicode:304a,Hiragana:Oh
**Numéro de neurone du jugement final:4, Unicode:304a,Hiragana:Oh**

C'est bon.

résultat

46 réponses correctes sur 50. Avec 4 erreurs, la précision était de 92%! Au fait, seules ces 4 photos ont été manquées. missed.png "A" a un caractère sale (sueur;

Certaines des choses qui ont fonctionné good.png

Il est difficile à exprimer car il s'agit d'un ensemble de données de test du miso avant, mais il a une bonne précision. Je ressens la possibilité du Deep Learning car il s'agit de données d'apprentissage centrées sur le type et applicables aux caractères manuscrits. Le chapitre 4 se termine ici. Dans le prochain chapitre 5, j'aimerais apprendre des bases des réseaux de neurones en me référant au blog de Hi-King.

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 4 [Amélioration de la précision de la reconnaissance en développant les données]
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 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 3 [Reconnaissance de caractères à l'aide d'un modèle]
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
Introduction à la modélisation statistique pour l'analyse des données Élargissement de la gamme d'applications de GLM
[Apprentissage de renforcement d'introduction] Renforcement de l'apprentissage pour bouger pour le moment
Chapitre 1 Introduction à Python Découpez uniquement les bons points de Deeplearning à partir de zéro
Résumé des pages utiles pour étudier le framework d'apprentissage profond Chainer
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 13 Bases du réseau neuronal
J'ai essayé de comparer la précision de la classification des phrases BERT japonaises et japonaises Distil BERT avec PyTorch et introduction de la technique d'amélioration de la précision BERT
Introduction au Deep Learning (1) --Chainer est expliqué d'une manière facile à comprendre pour les débutants-
GTUG Girls + PyLadiesTokyo Meetup Je suis allé au premier machine learning
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Comment utiliser MkDocs pour la première fois
[Introduction à cx_Oracle] (5e) Gestion des données japonaises
Implémentation du modèle Deep Learning pour la reconnaissance d'images
Essayez de publier sur Qiita pour la première fois
Implémentation de la méthode de clustering k-shape pour les données de séries chronologiques [Apprentissage non supervisé avec python Chapitre 13]
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer du chapitre 2
Techniques pour comprendre la base des décisions d'apprentissage en profondeur
[Introduction au modèle SIR] Prédire l'heure de fin de chaque pays avec l'ajustement des données COVID-19 ♬
[Introduction au graphique logarithmique] Prédire l'heure de fin de chaque pays à partir du graphique logarithmique des données sur le nombre d'infections ♬
Quel type d'environnement les personnes qui apprennent Python pour la première fois devraient-elles créer?
Traduction japonaise du matériel pédagogique public du diplôme nano d'apprentissage profond
Introduction aux statistiques Exercices du chapitre 2 de la presse de l'Université de Tokyo
[Introduction à matplotlib] Lire l'heure de fin à partir des données COVID-19 ♬
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 7 Analyse de régression
Créez une IA qui identifie le visage de Zuckerberg grâce à l'apprentissage en profondeur ③ (Apprentissage des données)
Si vous apprenez Linux pour la première fois, faites-le!
L'histoire du retour au front pour la première fois en 5 ans et de la refactorisation de Python Django