Ji-won nouvelle recommandation
Tout le code sont appelés peuvent être téléchargés ici ici: https: //github.com/ypwhs/dogs_vs_cats
La nouvelle 327 yuans Conférence Chi Technology iqiyi lien vidéo de lecture, s'il vous plaît cliquer pour lire l'original.
Cet article est reproduit avec la permission de Udacity connais presque numéro d'agence, auteur Yangpei Wen, projet d'apprentissage machine à Udacity critique, aimerait remercier!
Chats et chiens
Concours sur un ensemble de données de la Kaggle: Les chiens contre des chats, jeu de formation a 25.000 chats et les chiens chaque moitié. 12500 jeu de test, aucun étalonnage est un chat ou un chien.
Les éléments suivants sont quelques exemples de l'ensemble de la formation:
Les données pré-traitement
Parce que le nom de fichier est basé sur notre jeu de données dans un tel type.num.jpg de manière nommée, comme cat.0.jpg, mais l'utilisation de Keras de ImageDataGenerator besoin de différents types d'images dans les différents sous-dossier, donc nous avons besoin pré-traiter l'ensemble de données. Ici, nous prenons l'idée est de créer un lien symbolique (lien symbole), de sorte que les avantages ne sont pas copier des photos à nouveau, prendre l'espace inutile.
Nous pouvons voir dans la structure du dossier suivant, train2 il y a deux dossiers, qui sont les chats et les chiens, chaque dossier est de 12500 tableau.
vecteur caractéristique d'exportation
Pour ce problème, l'utilisation du réseau de pré-formation est la meilleure chose, et après des tests préliminaires, nous avons testé ResNet50 différents réseaux tels que, mais pas de haut rang, il semble que seulement deux cents Yi, donc nous nous avons besoin d'améliorer les performances du modèle. Ainsi, une méthode efficace est intégré différents modèles pour obtenir de bons résultats, écouter les autres. Si vous êtes derrière un énorme plus notre réseau entièrement connecté, vous devez exécuter la formation 10 générations de réseau dix énorme, et nous ne sommes pas entraînez couche de convolution, alors ceci est une perte de calcul. On peut donc en vedette la sortie du vecteur d'un certain nombre de réseaux différents à enregistrer pour la formation ultérieure, les avantages de le faire est qu'une fois que nous avons sauvé le vecteur de fonction, même sur un ordinateur portable ordinaire peut facilement entraîner.
Pour réutiliser le code, je pense écrire une fonction qui est nécessaire, alors nous devrons entrer dans le modèle de fonction, la taille de l'image d'entrée, et fonctions prétraiter Parce que Xception Inception V3 et les besoins de données à définir dans la plage (-1, 1), nous utiliserons GlobalAveragePooling2D chaque sortie de la couche d'activation convolution directe moyenne de la figure sinon le fichier de sortie sera très grande, et facile à surajustement. Ensuite, nous définissons deux générateur, utilisez la fonction de model.predict_generator pour exporter les vecteurs de caractéristiques, et finalement nous avons choisi ResNet50, Xception, Inception V3 trois modèles (si l'on peut exporter intéresse également le vecteur caractéristique VGG). Chaque modèle exporté est venu depuis longtemps, probablement besoin Aws p2.xlarge minutes dix à vingt minutes . Ces trois modèles sont en IMAGEnet Au-dessus de pré-formation, de sorte que chaque modèle peut dire à l'expérience et les conducteurs âgés exportés par les trois vecteurs de caractéristiques, une image peut être très résumé ce contenu.
H5 fichier exporté final est constitué de trois tableau numpy:
-
train (25000, 2048)
-
test (12500, 2048)
-
étiquette (25000)
Si vous ne voulez pas que leurs vecteurs de caractéristiques de l'informatique, où vous pouvez télécharger le fichier directement dérivé: GitHub presse (
références:
-
ResNet 15.12
-
Inception v315.12
-
Xception 16.10
fonction de chargement vecteur
Après après le code ci-dessus, nous obtenons les trois fichier fonction de vecteur, à savoir:
-
gap_ResNet50.h5
-
gap_InceptionV3.h5
-
gap_Xception.h5
Nous devons charger ces vecteurs de caractéristiques, et les Synthétise un vecteur caractéristique, rappelez-vous alors bouleversé X et y, ou après le temps que nous nous validation_split mal tourner. Ici numpy des graines de nombres aléatoires est 2017, afin de vous assurer que tous ceux qui exécuter ce code peut être émis en conséquence.
La construction du modèle
La construction du modèle est très simple, abandon droit et le classement très bien.
Nous pouvons également visualiser le modèle:
entraîneur
Après un bon élément de modèle, nous pouvons former, ici nous avons mis en vérifier la taille de l'ensemble est de 20%, ce qui signifie que l'ensemble de la formation est de 20000 graphique, jeu de validation de diagramme est 5000.
Nous pouvons voir que le processus de formation très rapidement, en quelques secondes dix sera en mesure de compléter la formation, le taux de précision est également élevé sur la validation mis en place avec une précision de 99,6%, ce qui équivaut à un millier seulement Incorrect Figure 4 , aussi pire que ce que je peux dire.
jeu de test prédictif
Après un bon modèle de formation, nous pouvons prédire l'ensemble de test, puis soumis à la Kaggle voir le score final.
Prédis que nous utilisons ici une petite astuce, nous allons limiter chaque valeur prédite à dans une plage, la raison est très simple, Kaggle critères d'évaluation officiels est LogLoss, pour prédire l'échantillon correct, 0,995 et 1 est à peu près la même mais les échantillons d'erreur de prédiction, l'écart entre 0 et 0,005 est très grande, est la différence entre 15 et 2. Comment traiter le problème de référence infini, l'expression suivante est défini problème de classification binaire LogLoss.
$$ \ textrm {LogLoss} = - \ frac {1} {n} \ {sum_ i = 1} ^ n \ left $$
Un autre endroit digne de mention est le nom du fichier de test n'est pas réglé à 1, 2, 3 cette ligne, mais dans l'ordre suivant:
Nous avons donc besoin de traiter chaque nom de fichier, puis affecté à la df, et enfin exporté sous forme de fichier csv.
résumé
On peut voir sur la figure ci-dessus, le modèle pour les premiers échantillons dix ont reçu une prévision très positive, après avoir soumis à Kaggle, le score est grande, 0,04141, dans le classement mondial peuvent être acheminés à 20/1314. Si nous voulons continuer à optimiser les performances du modèle peut être utilisé des modèles encore mieux pré-formés aux vecteurs de caractéristiques Derive, ou pré-formation pour affiner le modèle (affiner), ou des données amélioré (augmentation des données) et ainsi de suite.
Composez le code à deux dimensions concernent Udacity, en savoir plus d'information technique