[PYTHON] Reconnaissance d'image en apprentissage profond 3 après la création du modèle

Aidemy 2020/11/10

introduction

Bonjour, c'est Yope! Je suis une école littéraire croustillante, mais j'étais intéressé par les possibilités de l'IA, alors je suis allé à l'école spécialisée en IA "Aidemy" pour étudier. Je voudrais partager les connaissances acquises ici avec vous, et je les ai résumées dans Qiita. Je suis très heureux que de nombreuses personnes aient lu l'article de synthèse précédent. Merci! Ceci est le troisième article sur l'apprentissage en profondeur et la reconnaissance d'image. Ravi de vous rencontrer.

Quoi apprendre cette fois ・ Fonctions pratiques de Keras ・ À propos de la méthode pour améliorer la précision du modèle

fonction utile

Affichage du processus d'apprentissage

-Il existe un moyen de visualiser comment la __accuracy a changé à mesure que l'apprentissage progresse. Par exemple, si "model.fit ()" est stocké dans la variable "history", le changement de précision peut être obtenu avec __ "history.history ['acc']" __. Le reste peut être visualisé par __ "plt.plot ()" __.

-Aussi, dans le chapitre précédent, le calcul de la précision de généralisation a été effectué avec __ "model.evaluate (X_test, y_test)" , mais dans l'argument de "model.fit ()" __ "validation_data = (X_test)" , y_test) ” calculera la précision de généralisation de la même manière __. -De même, lors de l'acquisition du changement de précision de généralisation, il est recommandé d'utiliser __ "history.history ['val_acc']" __ pour le visualiser.

・ Code![Capture d'écran 2020-11-09 16.39.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/6865a878-5afe-94ef- 79b2-be27e002b530.png)

・ Résultat![Capture d'écran 2020-11-09 16.39.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/e1669f65-d751-4b17- 4a83-d54edadfa214.png)

Early Stopping ・ Même si le nombre d'apprentissage est trop grand, la précision diminue lorsqu'elle dépasse un certain niveau. Dans de tels cas, il est important d'arrêter __learning tôt __. __ "Early Stop" __ peut être utilisé dans de tels cas. ・ Early Stopping a des données de vérification en plus des données d'entraînement et de test, prend une erreur entre l'évaluation de ces données et l'évaluation des données d'entraînement pour chaque apprentissage, et arrête l'apprentissage au moment où l'erreur se propage. C'est. -En tant que code, créez d'abord une instance comme __ "es = EarlyStopping ()" __. Tout ce que vous avez à faire est de définir __ "callbacks = [es]" __ dans l'argument de model.fit (). -En tant qu'argument de l'instance, spécifiez ce qu'il faut surveiller comme erreur d'évaluation avec __ "monitor" __, et arrêtez d'apprendre si la valeur surveillée n'est pas améliorée du nombre d'époques avec __ "patience" __ Pour __ "mode" __, "améliorer le modèle" indique si la valeur spécifiée est "augmentée" ou "diminuée", respectivement, __ "'max'" et "'min", respectivement. Précisez avec «» __. Si ce paramètre est défini sur __ "'auto'" __, il sera deviné automatiquement.

Sortie de la structure du modèle

-Lorsque vous voulez vérifier la structure du modèle, il existe une méthode __ pour le sortir comme une image __. La méthode est juste __ "plot_model (model, to_file = 'model.png')" __. -Si vous voulez définir un nom pour chaque couche, ajoutez __ "nom" __ à l'argument lorsque vous utilisez __ "model.add ()" __ pour créer une couche ci-dessous.

·code

·résultat

Comment améliorer la précision

optimisation

・ Dans de nombreux cas, il est préférable de modifier le taux de __apprentissage à mesure que l'apprentissage progresse. Cela s'appelle __ "optimisation du taux d'apprentissage" __, et Adam, RMSprop, Adagrad, etc. sont utilisés.

Abandonner

-Bien qu'il soit apparu plusieurs fois auparavant, dropout peut être mentionné comme une méthode utilisée pour éviter le surapprentissage et améliorer la précision. Il s'agit d'une méthode qui facilite la généralisation en supprimant des données de manière aléatoire.

Réglage fin (apprentissage par transfert)

-Fine tuning __ (transfert learning) __ a été appris auparavant, mais c'est une méthode pour s'entraîner en utilisant une partie de __ d'autres modèles __. En termes de reconnaissance d'image, seule la dernière couche entièrement connectée est modifiée et la couche alambiquée est utilisée telle quelle. -En tant que modèle de reconnaissance d'image, Keras peut utiliser les cinq modèles de classification d'images __ "Xception, VGG16, VGG19, ResNet50, Inception V3" __ en téléchargeant les poids appris par ImageNet. Voici un exemple de création d'un modèle de VGG16.

スクリーンショット 2020-11-09 18.19.55.png

-Pour le code ci-dessus, donnez d'abord le formulaire d'entrée avec __ "input_tensor" __. Après avoir défini cela, créez un modèle de VGG __. Il peut être créé avec "VGG16 ()" __. En argument, __ "include_top" __ spécifie s'il faut utiliser la couche entièrement connectée du modèle d'origine avec True ou False, et __ "weights = 'imagenet'" __ spécifie d'utiliser les poids appris par imagenet. , __ "input_tensor" __ Décrivez le formulaire d'entrée défini précédemment.

・ Une fois que vous avez fait jusqu'à présent, l'étape suivante consiste à créer un modèle séparé __ (top_model) __ près de la couche de sortie (couche entièrement connectée). Puisque la couche d'entrée de top_model reçoit la sortie du modèle VGG (couche de convolution), elle est définie comme __ "Flatten ()" __. En définissant input_shape sur __ "vgg16.output_shape [1:]" __, la forme de sortie (bidimensionnelle) du modèle VGG peut être obtenue. -Le reste est comme ajouter des couches comme un modèle normal. Après avoir ajouté à la couche de sortie, l'étape suivante consiste à créer un modèle final avec __ "l'entrée est vgg16.input, la sortie est top_model avec la sortie vgg" __.

スクリーンショット 2020-11-09 18.44.49.png

-C'est la fin de l'ajout de couche, et à partir de maintenant, nous allons compiler et apprendre, mais avant cela, définissez le poids de la partie du modèle __VGG afin qu'elle ne soit pas modifiée __.

スクリーンショット 2020-11-09 18.44.58.png

-Il n'y a pas de changements particuliers dans la compilation et l'apprentissage. Un seul point, lors de l'exécution de l'apprentissage par transfert, la fonction d'optimisation doit être __ "SGD" __.

Sommaire

-La précision de l'apprentissage peut être visualisée en changeant __ "history ['acc']" __ en __ "plt.plot ()" __. -Même si model.evaluate () n'est pas utilisé, la précision de généralisation du modèle __ est calculée __ en définissant __ "validation_data" __ dans model, fit (). -Lors de l'utilisation de EarlyStopping, créez une instance puis spécifiez-la avec l'argument __ "callbacks" __ de model.fit (). -Si vous souhaitez visualiser la structure du modèle sous forme d'image, vous pouvez le faire avec __ "plot_model (model, to_file)" __. -En plus de l'optimisation et de l'abandon, il existe également des moyens d'améliorer la précision, tels que transfer learning. Par exemple, dans le cas de la reconnaissance d'image, la couche de convolution est transférée avec VGG16, le modèle près de la couche de sortie est implémenté par vous-même, et le modèle entier est implémenté par combinaison.

Cette fois, c'est fini. Merci d'avoir lu jusqu'à la fin.

Recommended Posts

Reconnaissance d'image en apprentissage profond 3 après la création du modèle
Implémentation du modèle de reconnaissance d'images d'apprentissage en profondeur 2
Modèle de reconnaissance d'image utilisant l'apprentissage profond en 2016
Reconnaissance d'image par apprentissage profond 1 théorie
Implémentation du modèle Deep Learning pour la reconnaissance d'images
Lire et mettre en œuvre l'apprentissage résiduel profond pour la reconnaissance d'image
Création, apprentissage et raisonnement de modèles d'apprentissage
Reconnaissance d'image en temps réel sur les appareils mobiles à l'aide du modèle d'apprentissage TensorFlow
Distillateur de bibliothèque d'éclaircissement de modèles d'apprentissage profond
[AI] Apprentissage en profondeur pour le débruitage d'image
Reconnaissance d'image
L'apprentissage en profondeur
Deep learning 2 appris par l'implémentation (classification d'images)
Alignement d'image: du SIFT au deep learning
Mémorandum d'apprentissage profond
Commencer l'apprentissage en profondeur
Image d'apprentissage gonflée
Reconnaissance d'image avec le modèle Caffe Chainer Yo!
Apprentissage en profondeur Python
Apprentissage profond × Python
Analyse d'images par apprentissage profond à partir de Kaggle et Keras
[Détection d'anomalies] Détecter la distorsion de l'image par apprentissage à distance
Premier apprentissage profond ~ Lutte ~
Python: pratique du Deep Learning
Fonctions d'apprentissage en profondeur / d'activation
Apprentissage profond à partir de zéro
Reconnaissance d'image avec keras
Apprentissage profond / entropie croisée
Premier apprentissage profond ~ Préparation ~
[AI] Apprentissage métrique profond
Tutoriel Pepper (7): Reconnaissance d'image
Python: réglage du Deep Learning
TensorFlow change-t-il l'image de l'apprentissage profond? Ce que j'ai pensé après avoir touché un peu
Fonction d'apprentissage profond / softmax
J'ai essayé d'héberger un modèle d'apprentissage en profondeur de TensorFlow à l'aide de TensorFlow Serving
[Apprentissage en profondeur] Classification d'images avec un réseau neuronal convolutif [DW jour 4]
Classifier les ensembles de données d'image CIFAR-10 à l'aide de divers modèles d'apprentissage en profondeur
J'ai essayé d'écrire dans un modèle de langage profondément appris
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]