Aidemy 2020/11/10
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
-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.
-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
・ 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.
-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.
-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.
-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" __.
-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 __.
-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" __.
-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.