Cet article est prévu par Fujitsu Systems Web Technology Co., Ltd. Calendrier de l'avent des vacances d'été Inobeko 2020 Jour 33 !! (Extended Battle) article. Le contenu de cet article est ma propre opinion et ne représente pas l'organisation à laquelle j'appartiens.
Dans Our previous ad-care Article que j'ai publié dans, J'ai touché skit-learn pour implémenter la reconnaissance de caractères manuscrits de "caractère runique". J'ai pu le créer pour le moment, mais quand j'ai étudié le Deep Learning à partir de ce moment-là, "** Pour la reconnaissance d'image, pas pour le réseau neuronal de base Il existe une meilleure façon d'utiliser un réseau neuronal convolutif (CNN)! **"Quand Maintenant que nous savons cela, nous allons partager ce que nous savons sur sa mise en œuvre et son fonctionnement.
Les personnages runiques sont cool, non?
À l'aide de la bibliothèque d'apprentissage automatique Python ** scikit-learn **, J'ai utilisé le classificateur MLP, un modèle qui effectue une «classification», pour classer les caractères runiques manuscrits. Pour les données, j'ai préparé moi-même une image de caractères manuscrits, je l'ai augmentée avec "Data Augmentation" et je l'ai utilisée pour l'apprentissage.
En conséquence, nous avons pu créer un modèle capable de reconnaître les caractères manuscrits avec une précision d'environ 80%. Cependant, comme indiqué ci-dessous, j'étais intéressé par le fait que les données d'image étaient disposées dans un tableau unidimensionnel pour l'apprentissage.
--Traitement de la partie qui lit les données
#Lisez les fichiers du répertoire et ajoutez-les à la liste des données d'entraînement
for i, file in enumerate(files):
image = Image.open(file)
image = image.convert("L")
image = image.resize((image_size, image_size))
data = np.asarray(image).flatten() ##★ Ici, les informations de pixel sont transformées en un tableau unidimensionnel.
X.append(data)
#Afficher les données
np.set_printoptions(threshold=np.inf)
print(np.array(image2).flatten())
--Lire l'image du personnage manuscrit
<détails> Comme mentionné ci-dessus, dans un tableau unidimensionnel
Les informations sur les pixels du coin supérieur gauche au coin inférieur droit de l'image doivent être à plat.
Si tel est le cas, les informations verticales et horizontales de l'image seront perdues ... D'autre part, si vous utilisez quelque chose appelé un réseau neuronal convolutif (CNN)
J'ai appris que vous pouvez apprendre avec des données contenant des informations verticales et horizontales!
Ci-dessous, je décrirai le schéma et la méthode de mise en œuvre que j'ai organisés. Réseau neuronal convolutif (CNN)
Un réseau de neurones utilisé dans le domaine du traitement d'images
** L'image peut être utilisée telle quelle pour une saisie en deux dimensions **. L'idée principale de CNN est "Imitons le mouvement des cellules nerveuses dans le champ visuel des humains."
La méthode qui a été créée. CNN utilise un filtre (noyau) pour extraire les fonctionnalités d'une image.
Utilisez un filtre plus petit que l'image d'origine.
Superposez les filtres dans l'ordre en haut à gauche de l'image,
Calculez la somme du produit de l'image et de la valeur du filtre. Les caractéristiques obtenues à partir de l'image changeront en fonction de ce que vous faites avec les numéros de filtre.
Vous apprendrez quelle valeur le filtre doit avoir. [Référence] Vous pouvez voir le processus de reconnaissance de caractères de CNN visuellement sur le site suivant!
https://www.cs.ryerson.ca/~aharley/vis/conv/ Il semble y avoir un moyen d'implémenter les deux modèles suivants! Il s'agit d'une méthode pour implémenter manuellement le processus de calcul de filtre de CNN.
C'est pratiqué dans cet article.
https://qiita.com/ta-ka/items/1c588dd0559d1aad9921 Vous pouvez également implémenter CNN à l'aide de Keras, une bibliothèque dédiée au deep learning. https://keras.io/ja/ Keras est une bibliothèque de réseau neuronal de haut niveau écrite en Python qui peut être exécutée sur TensorFlow, CNTK ou Theano.
Si vous avez besoin d'une bibliothèque d'apprentissage en profondeur dans les cas suivants, utilisez Keras:
-Supporte à la fois CNN et RNN, et les combinaisons de ces deux Cette fois, je vais essayer d'utiliser la bibliothèque 2.Keras. Lorsque vous essayez d'utiliser Keras à cette fin, les options suivantes sont probablement disponibles. --Appelez et utilisez directement le Keras autonome
--Utilisez Keras inclus avec TensorFlow Cependant, à partir de mai 2020, le manuel officiel "Keras est fourni avec TensorFlow 2.0 sous le nom tensorflow.keras.
Pour démarrer avec Keras, installez simplement TensorFlow 2.0. " Il semble que ce soit une tendance à s'unifier à "Keras of TensorFlow". (Cité de l'article suivant) [Référence] La fin de Keras multi-backend, unifiée dans tf.keras
https://www.atmarkit.co.jp/ait/articles/2005/13/news017.html Après le passage du temps, j'utiliserai cette fois Keras de Tensorflow. Donc, j'ai utilisé ce qui suit.
TensorFlow a dû utiliser la version 2.0.0 avec une intégration améliorée avec Keras. --Anaconda: (Un package qui inclut Python lui-même et les bibliothèques couramment utilisées) Apprenons avec les données d'image créées (24 (caractères) x 18 (feuilles)) une fois précédent. Préparez un ensemble d'images et d'étiquettes à utiliser pour l'apprentissage.
Cette fois, il semble que nous devions passer le libellé de chaque donnée numériquement au modèle de Keras CNN.
J'ai créé à l'avance une table de correspondance de chaque caractère de rune et de l'étiquette (valeur numérique) dans Dictionary. <détails> Chargez l'image. Créez un modèle à entraîner.
Ici, définissez les "paramètres de couche de convolution (forme des données d'entrée, paramètres de filtre)" et "fonction d'activation à utiliser". Une explication détaillée de chaque élément est décrite en détail dans cet article.
Se il vous plaît se référer ...! https://qiita.com/mako0715/items/b6605a77467ac439955b L'apprentissage lui-même peut être fait simplement en appelant la fonction fit (). Une fois exécuté, un résumé de chaque apprentissage sera affiché. --loss: La valeur d'évaluation de la fonction de perte (plus la valeur est basse, plus la précision de la prédiction est élevée).
--acc: La précision de la prédiction. Dans le premier apprentissage, le taux de précision était d'environ 9%, mais dans le cinquième apprentissage, la précision est de 83%! Laissez le modèle prédire les données de validation. Créez une matrice de confusion en prenant l'exactitude de la prédiction des données de test. La matrice mixte est une table de combinaison de «valeur réelle \ valeur prédite du modèle».
Le nombre de réponses correctes correspond à l'intersection des lignes et des colonnes du même nombre. La bonne réponse est la majorité!
Après cela, vous pouvez voir qu'il y a beaucoup de mauvaises réponses avec la lettre "ᛒ", qui est le numéro 17 dans le tableau des résultats.
Si vous voulez vraiment augmenter le pourcentage de réponses correctes, vous pouvez revoir ou augmenter les données "ᛒ". Je pense qu'il y a peu de données d'entraînement, donc je vais traiter l'image du personnage manuscrit pour augmenter les données d'entraînement.
Cette fois, j'ai pu facilement faire pivoter les données de caractères avec un package de prétraitement appelé keras_preprocessing.
Cela est également ajouté aux données. C'était si simple! !!
En particulier, les marges générées par la rotation étant complétées,
Le fond ne devient pas noir. N'est-ce pas vraiment pratique ...? Apprenons à nouveau en ajoutant les données augmentées en faisant pivoter l'image d'origine. Le modèle peut désormais être plus précis que lorsque la quantité de données est faible! (97%) Jusqu'à présent, nous avons décrit le flux d'utilisation d'un réseau de neurones convolutif utilisant Keras en python. «Nous n'avons pas été en mesure de comparer exactement les mêmes données, mais nous avons constaté que l'utilisation de CNN offrait une précision plus élevée que le réseau neuronal de base précédent.
―― Dans l'ensemble, en utilisant les bibliothèques tensorflow et Keras, il y avait de nombreux endroits où vous pouviez écrire du code plus clairement que la dernière fois dans le prétraitement et l'affichage des résultats d'apprentissage / de prédiction!
――Je voudrais étudier et comprendre à nouveau l'emplacement de montage avec une compréhension duveteuse cette fois. J'espère que cet article vous sera utile. Enfin, je suis désolé d'être complètement en retard!
Je suis content d'avoir pu participer à la campagne publicitaire d'été, merci.
Recommended Posts
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 94 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 160 253 135 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 91 244 229 243 229 72 17 1 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 181 253 123 162 225 242 192 144 84 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 142 241 138 0 31 62 125 169 250 247 212 210 62 31 5 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 231 225 50 0 0 1 0 19 46 176 211 244 247 193 166 107 80 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 159 255 171 10 0 0 0 0 0 1 0 49 86 137 175 251 251 243 209 72 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 218 247 71 0 0 0 0 0 0 0 0 0 0 0 12 59 165 180 216 253 119 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 133 248 173 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 111 224 240 113 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 245 246 51 0 0 0 0 0 0 0 0 0 0 0 0 0 2 40 244 253 94 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 147 251 177 23 0 0 0 0 0 0 0 0 0 0 0 0 0 103 228 222 117 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 204 244 102 0 0 0 0 0 0 0 0 0 0 0 0 0 31 179 251 152 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 93 248 228 0 0 0 0 0 0 0 0 0 0 0 0 0 21 159 255 250 43 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 191 251 88 0 0 0 0 0 0 0 0 0 0 0 0 0 35 219 225 105 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 74 216 199 25 0 0 0 0 0 0 0 0 0 0 0 0 35 158 252 148 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 96 251 135 0 0 0 0 0 0 0 0 0 0 0 0 0 97 239 228 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 175 253 63 1 1 0 0 0 0 0 0 0 0 0 0 14 236 225 74 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 180 224 156 118 26 1 0 0 0 0 0 0 0 0 28 150 245 136 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 103 254 255 255 234 90 72 19 20 0 0 0 0 0 92 220 205 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 94 171 207 249 239 219 224 170 107 13 23 0 11 198 253 42 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 44 67 109 150 252 240 254 228 152 135 203 245 166 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 42 104 135 183 235 246 249 251 190 26 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 25 41 253 255 238 251 219 153 108 46 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 212 231 138 128 179 243 239 217 179 87 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 112 246 174 0 7 26 36 165 244 249 252 197 87 48 12 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 228 236 84 0 0 0 0 0 54 111 167 204 255 207 150 64 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 101 243 185 29 0 0 0 0 0 0 3 15 53 83 191 246 250 165 107 34 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 169 241 115 0 0 0 0 0 0 0 0 0 0 4 14 75 159 224 231 199 125 65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50 232 225 0 0 0 0 0 0 0 0 0 0 0 0 0 2 11 35 133 255 253 209 150 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 117 242 122 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 33 134 164 87 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 160 225 62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 235 186 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 110 249 109 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 168 240 106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 185 220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 169 97 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
Utilisation du réseau neuronal à convolution (CNN)
Aperçu
Méthode de mise en œuvre
1. Assemblé à la main avec Numpy
2. Utilisez la bibliothèque Keras
Utilisation de Keras
Ce qui a été utilisé
Données utilisées
la mise en oeuvre
Importez le package à utiliser
#Package pour travailler avec des tableaux
import numpy as np
#Package de gestion des données et des fichiers image
from PIL import Image
import os, glob
# tensorflow
import tensorflow as tf
#Un package pratique de Keras qui pré-traite les données
from tensorflow.keras.preprocessing.image import array_to_img, img_to_array, load_img
from keras.utils import np_utils
#Utilisé pour séparer les données d'entraînement et les données de test
from sklearn.model_selection import train_test_split
#Utilisé pour l'affichage d'image des données d'entraînement
import matplotlib.pyplot as plt
#Utilisé pour afficher un résumé des résultats d'apprentissage
import pandas as pd
Lire le fichier
runeCharDict = { 0 : 'ᚠ',
1 : 'ᚢ',
2 : 'ᚦ',
3 : 'ᚫ',
4 : 'ᚱ',
5 : 'ᚲ',
6 : 'ᚷ',
7 : 'ᚹ',
8 : 'ᚺ',
9 : 'ᚾ',
10 : 'ᛁ',
11 : 'ᛃ',
12 : 'ᛇ',
13 : 'ᛈ',
14 : 'ᛉ',
15 : 'ᛋ',
16 : 'ᛏ',
17 : 'ᛒ',
18 : 'ᛖ',
19 : 'ᛗ',
20 : 'ᛚ',
21 : 'ᛜ',
22 : 'ᛞ',
23 : 'ᛟ',
}
#Lecture de fichiers
#Tableau pour stocker les données d'image
X = []
#Caractères correspondant aux données d'image(répondre)Tableau à stocker
Y = []
#Fichier de répertoire de données d'entraînement
dir = '[Répertoire où sont stockées les données d'image des caractères manuscrits]'
files = glob.glob(dir + "\\*.png ")
#Taille verticale et horizontale de l'image(pixel)
image_size = 50
#Lisez les fichiers du répertoire et ajoutez-les à la liste des données d'entraînement
for i, file in enumerate(files):
temp_img = load_img(file, target_size=(image_size, image_size))
temp_img_array = img_to_array(temp_img)
X.append(temp_img_array)
moji = file.split("\\")[-1].split("_")[0]
label = list(runeCharDict.keys())[list(runeCharDict.values()).index(moji)]
Y.append(label)
X = np.asarray(X)
Y = np.asarray(Y)
#Convertir les valeurs de pixel de 0 à 1
X = X.astype('float32')
X = X / 255.0
#Convertir le format de classe
Y = np_utils.to_categorical(Y, 24)
Créer un modèle
#Créer un modèle pour CNN
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(50, 50, 3)),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(32, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(24, activation='softmax')
])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
Apprentissage
#Séparez les données d'entraînement et les données de test
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=111)
#Apprentissage
model.fit(x_train, y_train, epochs=5)
Epoch 1/5
246/246 [==============================] - 2s 9ms/sample - loss: 3.1595 - acc: 0.0935
Epoch 2/5
246/246 [==============================] - 2s 9ms/sample - loss: 2.8289 - acc: 0.2317
Epoch 3/5
246/246 [==============================] - 2s 8ms/sample - loss: 2.0306 - acc: 0.4593
Epoch 4/5
246/246 [==============================] - 2s 8ms/sample - loss: 1.0820 - acc: 0.7642
Epoch 5/5
246/246 [==============================] - 2s 9ms/sample - loss: 0.6330 - acc: 0.8333
En regardant les éléments de droite, vous pouvez voir le pourcentage de réponses correctes pour le modèle en formation.
Test du modèle / affichage des résultats
#Appliquer aux données de test
predict_classes = model.predict_classes(x_test)
mg_df = pd.DataFrame({'predict': predict_classes, 'class': np.argmax(y_test, axis=1)})
#Sortie du nombre maximum actuel de colonnes d'affichage
pd.get_option("display.max_columns")
#Spécifiez le nombre maximum de colonnes d'affichage (50 colonnes sont spécifiées ici)
pd.set_option('display.max_columns', 50)
# confusion matrix
pd.crosstab(mg_df['class'], mg_df['predict'])
résultat
Données gonflées
#Keras utilisé dans les coulisses par Keras_preprocessing
from keras_preprocessing.image import apply_affine_transform
#Lecture de fichiers
#Tableau pour stocker les données d'image
X = []
#Caractères correspondant aux données d'image(répondre)Tableau à stocker
Y = []
#Lecture de fichiers(Comme mentionné ci-dessus)
#Lisez les fichiers du répertoire et ajoutez-les à la liste des données d'entraînement
for i, file in enumerate(files):
#Enregistrer les données originales(Comme mentionné ci-dessus)
#Données gonflées
image = img_to_array(temp_img)
#1. 1. Rotation de 10 degrés dans le sens des aiguilles d'une montre "thêta"=Spécifiez la fréquence de rotation avec
image1 = apply_affine_transform(image, channel_axis=2, theta=10, fill_mode="nearest", cval=0.)
X.append(image1)
Y.append(label)
#2. Rotation de 10 degrés dans le sens antihoraire
image2 = apply_affine_transform(image, channel_axis=2, theta=-10, fill_mode="nearest", cval=0.)
X.append(image2)
Y.append(label)
# #3. 3. Rotation de 20 degrés dans le sens des aiguilles d'une montre
image3 = apply_affine_transform(image, channel_axis=2, theta=20, fill_mode="nearest", cval=0.)
X.append(image3)
Y.append(label)
#4. Rotation de 20 degrés dans le sens antihoraire
image4 = apply_affine_transform(image, channel_axis=2, theta=-20, fill_mode="nearest", cval=0.)
X.append(image4)
Y.append(label)
Résultat d'apprentissage
Epoch 1/5
1232/1232 [==============================] - 7s 6ms/sample - loss: 23.2898 - accuracy: 0.1144
Epoch 2/5
1232/1232 [==============================] - 7s 6ms/sample - loss: 1.1991 - accuracy: 0.6396
Epoch 3/5
1232/1232 [==============================] - 7s 5ms/sample - loss: 0.3489 - accuracy: 0.8847
Epoch 4/5
1232/1232 [==============================] - 7s 5ms/sample - loss: 0.1527 - accuracy: 0.9456
Epoch 5/5
1232/1232 [==============================] - 6s 5ms/sample - loss: 0.0839 - accuracy: 0.9740
À la fin
Ce que je pensais