Chats et chiens de précision Linéarisation Kaggle Top 2%, vous appris à construire la profondeur dans Keras CNN

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

Cet automne, comme une personne, main Voyage
Précédent
Consommation 1,62,0! La valeur du SUV commençant par T
Prochain
trésorerie du transport aérien russe aux Chinois, ou les exportations de blé russe étendra, les agriculteurs russes attendent de faire plus de RMB
mer et fondit Net carthame scène le plus laid: belle mère patrie, mais certaines personnes ne méritent pas
inversion Dieu Shu La police a sauvé le saut froid de la nuit dans un homme de la rivière, après l'atterrissage lui a donné menotté ......
la police Lu Yu a couru pour rattraper une question ne peut pas être
Boss, ne pas ignorer la frustration intense d'un bon employé
Le dollar a augmenté, l'or a chuté, la théorie du cycle du dollar porte-parole: 6 ans après la 200 $ seulement pour un euro
Séoul, l'un de 3 ans à la fille âgée de 80 ans dans la ville sont
De ceux qui font la commercialisation, il n'y a pas demain
A partir de Janvier 1 année prochaine, dans la gamme de feux d'artifice d'interdiction Fuliang Comté!
Évidemment, vous pouvez appuyer sur la puissance du moteur pour être plus fort, pourquoi les fabricants ne le font pas?
Indignité Souffert, Uber sans pilote complètement ordonné l'arrêt frustré à nouveau le développement du pilote automatique
Chaleureuse! Jingdezhen: prise en charge des travailleurs de l'assainissement, nous prenons des mesures