Partie 1: http://qiita.com/kenmaz/items/4b60ea00b159b3e00100 Partie 2: http://qiita.com/kenmaz/items/ef0a1308582fe0fc5ea1
Ceci est une continuation de l'histoire d'un ingénieur logiciel qui est complètement nouveau dans l'apprentissage automatique et l'apprentissage profond, et a créé une application qui utilise un réseau neuronal convolutif pour identifier les visages des membres de "Momoiro Clover Z".
La dernière fois J'ai pu faire un modèle avec une précision de 85%, mais comme je suis parti d'un état ignorant, je ne pouvais pas du tout obtenir de précision au début. fait. Notez le processus d'essais et d'erreurs car il peut être utile à quelqu'un.
Jusqu'à présent, j'ai réussi à arrêter de m'entraîner avec mon MacBook Pro en quelques centaines d'étapes. ――Cependant, si vous regardez l'exemple de code, etc., max_step = 100 000, donc je pense que l'apprentissage n'est pas suffisant en premier lieu. «J'ai décidé de créer un environnement sur ec2, d'emprunter diverses instances et de les faire pivoter.
En regardant la précision pour chaque membre, c'était comme suit.
member | précision |
---|---|
Reni | 77% |
Natsunako | 44% |
Shiori | 73% |
Ahrin | 58% |
Kyouka | 88% |
Ce n'est pas que je ne pensais pas que "Ouais, je veux être recommandé parce que j'ai un visage distinctif ... Il y a une histoire selon laquelle un bel homme et une belle femme sont plus proches du visage moyen ...", mais je suis calme. Quand j'y pense, j'ai eu l'idée que la variation dans les données d'entraînement elles-mêmes serait trop grande. (Angle de cuisse, et je suis convaincu que Kyouka est relativement précis. ・)
Les données d'entraînement que j'ai utilisées jusqu'à présent sont une collection des résultats de leur recréation plusieurs fois, de sorte que les programmes qui les génèrent sont également légèrement différents, ce qui semble avoir conduit à des variations dans les données d'entraînement.
Nous nous préparons également à le publier en tant que service web en parallèle, et nous avons dû faire quelque chose sur la partie reconnaissance faciale, donc une logique de reconnaissance faciale stable pour qu'il n'y ait pas de variation entre chaque membre. Le résultat de l'ajustement a été expliqué dans la première partie Code actuel. Recréez toutes les données d'entraînement avec ce gars et entraînez-vous à nouveau.
=> ** Précision 77% **
`` J'ai senti que des données d'entraînement stables avaient été créées, j'ai donc ajouté une couche au modèle ici pour l'approfondir. C'était le [code du modèle actuel] expliqué la dernière fois (https://github.com/kenmaz/momo_mind/blob/master/deeplearning/mcz_model.py)
Donc, tout en faisant diverses erreurs stupides, je suis passé par essais et erreurs. .. ** J'ai réalisé du fond du cœur que la qualité des données d'entraînement et des entraînements répétitifs sont importants **.
Soit dit en passant, dans un cas comme celui-ci où vous avez besoin d'une machine haute performance sur place, un environnement comme aws est vraiment pratique. C'est cher cependant. Depuis que j'ai touché chaque instance de manière variée pendant l'apprentissage, la performance approximative est comme ça.
Lorsque j'essaie de créer un réseau neuronal très profond (16 couches) et d'exécuter un entraînement.
Type d'instance | Performances approximatives |
---|---|
t2.micor | N/A (Ne peut pas être exécuté en raison d'un manque de ressources) |
MacBook Pro à portée de main | 3.4 examples/sec; 34.967 sec/batch) |
c4.4xlarge | 3.9 examples/sec; 31.142 sec/batch |
c4.8xlarge | 8.6 examples/sec; 14.025 sec/batch |
c4.4xlarge, 2 $ par heure, mais rapide. c4.4xlarge est à peu près identique à MBP. Cependant, tous sont le résultat de l'utilisation de la version CPU de TensorFlow, je voudrais donc essayer la construction GPU à l'avenir pour voir à quelle vitesse elle est.
De plus, au début, j'essayais de faire diverses choses avec mon VPS, mais avec CentOS6, la combinaison de la version Glibc et de numpy n'est pas bonne (CentOS6 ne prend en charge que la glibc v2.12, numpy prend en charge Glibc 2.15 Request => CentOS7 est requis), donc c'était ennuyeux, donc ec2 est pratique car vous pouvez créer un environnement et le détruire. C'est cher cependant.
Les modèles entraînés peuvent désormais utiliser tf.train.Saver
pour générer et charger des instantanés de poids et de valeurs de biais ajustés à plusieurs reprises sous forme de fichier modèle.
Cette fois, le fichier de modèle est sorti chaque fois que 1000 étapes sont exécutées. https://github.com/kenmaz/momo_mind/blob/master/deeplearning/mcz_main.py
Si vous souhaitez créer un service Web à l'aide des résultats d'apprentissage, vous pouvez écrire du code qui lit ce fichier de modèle, exécute l'inférence et renvoie les résultats côté Web.
J'ai donc préparé un code qui, après avoir passé le chemin du fichier image, exécute l'inférence sur l'image et renvoie le résultat de la classification des membres. https://github.com/kenmaz/momo_mind/blob/master/deeplearning/mcz_eval.py
result = mcz_eval.execute([imgfile1], '.', ckpt_path)
Vous pouvez exécuter du code tel que lire le fichier de modèle dans le chemin d'accès de ckpt_path et renvoyer le résultat de l'inférence sur imgfile1.
Maintenant que mcz_eval.py est créé, tout ce que vous avez à faire est de procéder à une programmation Web familière. Cependant, je n'ai jamais écrit d'application Web en Python, donc après de nombreuses recherches, la combinaison de Flask + uWSGI + Nginx
semble avoir du sens. En passant, il est implémenté discrètement en référence aux pages suivantes.
Cela s'est avéré être un article assez grossier, mais pour le moment, c'était une histoire selon laquelle quelque chose comme ça a été fait par essais et erreurs.
――Je souhaite améliorer la précision (twango Merci pour vos conseils) ――Je voudrais visualiser "à quel type de fonctionnalité avez-vous réagi et produit le résultat de l'inférence". Par exemple, "il y a une rangée de pixels bosselés = Natsunako" et "les yeux ont tendance à être séparés = Kyouka". En fait, je l'ai essayé une fois dans GW, mais cela n'a pas fonctionné. Je veux réessayer. --Je veux essayer la construction GPU ――Je veux jouer avec d'autres types, tels que les réseaux neuronaux récursifs.
c'est tout!
Recommended Posts