[PYTHON] [Partie 4] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques

Jusqu'à la dernière fois

Jusqu'à la dernière fois

[Partie 1] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques [Partie 2] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques [Partie 3] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques

Si vous ne résumez que le résultat final

Nous avons augmenté Epoch de 50 générations à 100 générations, et l'ASC moyenne était de 0,724, et les résultats suivants étaient les meilleurs pour le moment.

Météo precision recall f1-score
pluie 0.53 0.77 0.63
Bien 0.86 0.68 0.76
moyenne 0.76 0.71 0.72

Au moins, il y avait trop peu de générations. Cependant, le changement d'image, l'augmentation des données d'entraînement et la classification ternaire n'ont pas amélioré les résultats.

essai et erreur

Après de nombreux essais et erreurs, j'ai essayé de faire quelque chose qui n'était ni euh ni euh, mais je n'ai rien trouvé qui dépassait cette AUC ...

Pour ne résumer que les résultats,

Si vous essayez de changer la génération en 1000 générations, la précision diminuera.

C'est du surapprentissage. Avec les données d'entraînement, la précision monte à 0,95, mais avec les données de test, les résultats sont pires.

Même si vous essayez d'augmenter le nombre de couches masquées, la précision n'augmente pas, mais diminue plutôt.

Actuellement, la couche cachée compte 500 nœuds, mais même s'il s'agit de 1000 nœuds, la précision ne s'est pas améliorée.

J'essaie de faire un modèle fin, un modèle de pluie et un modèle de nuage, mais la précision diminue.

J'ai créé trois modèles qui effectuent une classification binaire selon laquelle il fait beau, pluvieux ou nuageux, mais la précision a diminué.

J'ai essayé d'augmenter le nombre de couches de pliage, mais la précision ne s'est pas améliorée non plus.

On a dit qu'il valait mieux l'augmenter, mais c'est aussi inutile.

etc.

Possibilité d'arriver

En conséquence, les candidats qui sont arrivés sont les suivants.

1. Modifiez la méthode de mise à l'échelle.

Jusqu'à présent, la mise à l'échelle des données d'image a été

img_mat /= 255.

C'était une mise à l'échelle très simple. La mise à l'échelle est également importante dans l'apprentissage automatique conventionnel et il est souvent difficile d'apprendre sans une mise à l'échelle appropriée.

Par conséquent, cela est modifié en normalisant les données d'entraînement pour chaque canal RVB comme suit.

for i in range(0,3):
	m = x_train_mat[:,i,:,:].mean()
	s = x_train_mat[:,i,:,:].std()
	x_train_mat[:,i,:,:] = (x_train_mat[:,i,:,:] - m)/s
	x_test_mat[:,i,:,:] = (x_test_mat[:,i,:,:] - m)/s

En conséquence, en regardant le processus d'apprentissage, la vitesse d'apprentissage a considérablement changé et la précision s'est améliorée en un petit nombre de générations.

2. Ajout du traitement par lots

Selon l'article, CNN devrait utiliser un modèle pré-entraîné, alors introduisons ceci brièvement. Dans un entraînement normal, la taille du lot divise les données d'apprentissage en 1 Epoch, mais les données d'apprentissage elles-mêmes à introduire dans le modèle sont divisées.

En d'autres termes

Données d'apprentissage A → Réglage du modèle → Données d'apprentissage B → Réglage du modèle → (ry

Après avoir réglé le modèle avec A comme indiqué dans, effectuez le réglage du modèle avec B à l'aide de ce paramètre.

Conceptuellement, il est destiné à supprimer le surapprentissage et le réglage fin.

Si vous écrivez dans le code

N = len(x_train_mat)
wbatch = N/3
perm = np.random.permutation(N)
for i in six.moves.range(0, N, wbatch):
	t_x_data = x_train_mat[perm[i:i + wbatch]]
	t_y_data = y_train[perm[i:i + wbatch]]
	if len(t_y_data) > wbatch / 2:
    	"""Jeter s'il y a trop peu de données d'entraînement"""
    	cnn.fit_test(t_x_data,t_y_data,x_test_mat,y_test)

Comme ça.

3. Traitement des données des enseignants

Les données des enseignants dans les données de formation sont biaisées et la relation est comme la pluie <bien. En conséquence, il s'adapte excessivement du côté ensoleillé, et il est devenu évident que la précision de la pluie ne s'améliore pas. Par conséquent, afin d'augmenter les données de pluie dans les données d'apprentissage, le traitement suivant a été effectué.

  1. Transformez toutes les données 2015 en données d'entraînement.
  2. Ajoutez les données «pluie» de 2013 et 2014 aux données d'entraînement.
  3. Utilisez toutes les données 2016 sans modifier les données de test.

4. Modeste changement de modèle

Pour éviter le surapprentissage, nous avons inclus le décrochage dans les résultats de mise en commun CNN max.

5. Ajustez la taille du filtre et la taille de la mise en commun

Jusqu'à présent, j'ai décidé de cette zone sans l'ajuster et l'ai mise à 3, mais je vais changer cela.

Le progrès

Dans les conditions ci-dessus, nous modifierons la taille du filtre et la taille du pool.

Pour taille de filtre 3 et taille de pooling 2

ASC moyenne: 0,711 ASC ensoleillé: 0,790

Météo precision recall f1-score
pluie 0.6 0.61 0.6
Bien 0.82 0.82 0.82
moyenne 0.75 0.75 0.75

Pour taille de filtre 3 et taille de pooling 4

ASC moyenne: 0,719 AUC de Haru: 0,783

Météo precision recall f1-score
pluie 0.66 0.58 0.61
Bien 0.82 0.86 0.84
moyenne 0.77 0.77 0.77

Pour taille de filtre 3 et taille de pooling 6

ASC moyenne: ** 0,735 ** ASC ensoleillé: 0,780

Météo precision recall f1-score
pluie 0.67 0.61 0.63
Bien 0.83 0.86 0.85
moyenne 0.78 0.78 0.78

Pour taille de filtre 3 et taille de pooling 8

ASC moyenne: 0,688 ASC ensoleillé: 0,790

Météo precision recall f1-score
pluie 0.67 0.48 0.56
Bien 0.79 0.89 0.84
moyenne 0.75 0.76 0.75

Pour taille de filtre 5 et taille de pooling 6

ASC moyenne: ** 0,741 ** AUC de Haru: 0,784

Météo precision recall f1-score
pluie 0.53 0.8 0.64
Bien 0.88 0.68 0.77
moyenne 0.77 0.72 0.73

Pour la taille de filtre 1 et la taille de pooling 6

ASC moyenne: ** 0,750 ** ASC ensoleillé: 0,790

Météo precision recall f1-score
pluie 0.61 0.7 0.65
Bien 0.85 0.8 0.83
moyenne 0.78 0.77 0.77

Apparemment, le résultat est meilleur si la taille du filtre est définie sur 0 et la taille du pool est un peu plus grande. L'augmentation de la taille de la mise en commun extraira plus de caractéristiques, donc cela peut être mieux cette fois. Je pense qu'il existe une bonne combinaison de taille de filtre et de taille de pool en fonction du problème.

Résultats d'essais et d'erreurs

Le résultat final du modèle terminé est le suivant.

ASC moyenne: ** 0,767 ** AUC de Haru: ** 0,806 **

Météo precision recall f1-score
pluie 0.59 0.77 0.67
Bien 0.88 0.76 0.82
moyenne 0.79 0.76 0.77

Il a considérablement augmenté en tant que AUC.

Conclusion

Je continue les essais et les erreurs en modifiant diverses conditions, mais je n'ai pas pu trouver quelque chose comme un modèle, alors j'essaie diverses combinaisons. Cependant, étant donné que l'évaluation est trop effectuée avec les données de test, les données de test ne font-elles pas également partie des données d'entraînement? Il est certain que la théorie est sortie. Il peut être préférable d'utiliser différentes données de test lorsque le modèle final est terminé.

Recommended Posts

[Partie 4] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
[Partie 1] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
[Partie 3] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
[Partie 2] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
Apprendre en profondeur à partir des bases mathématiques Partie 2 (pendant la fréquentation)
J'ai essayé d'implémenter Perceptron Part 1 [Deep Learning from scratch]
Apprentissage amélioré pour apprendre de zéro à profond
Alignement d'image: du SIFT au deep learning
Mémo d'auto-apprentissage "Deep Learning from scratch" (partie 12) Deep learning
Obtenez des données de Poloniex, un bureau de change virtuel, via l'API et utilisez le Deep Learning pour prédire le prix du lendemain.
À propos de l'ordre d'apprentissage des langages de programmation (de débutant à intermédiaire) Partie 2
Les débutants du Deep Learning ont essayé les prévisions météorologiques à partir d'images satellitaires météorologiques à l'aide de Keras
Tweet les prévisions météo avec le bot Partie 2
Deep Learning from scratch ① Chapitre 6 "Techniques liées à l'apprentissage"
POST des images depuis ESP32-CAM (MicroPython) vers le serveur
Prévision du cours des actions à l'aide du Deep Learning (TensorFlow) - Partie 2
Apprentissage profond à partir de zéro
Créer un ensemble de données d'images à utiliser pour la formation
[Deep Learning from scratch] J'ai implémenté la couche Affine
Je voulais utiliser la bibliothèque Python de MATLAB
Othello ~ De la troisième ligne de "Implementation Deep Learning" (4) [Fin]
[Deep Learning from scratch] J'ai essayé d'expliquer le décrochage
Apprentissage profond à partir de zéro 1 à 3 chapitres
Papier: Papier d'apprentissage automatique qui reproduit des images dans le cerveau, (reconstruction d'image profonde à partir de l'activité cérébrale humaine)
Comment utiliser le générateur
[Apprentissage en profondeur] Découvrez comment utiliser chaque fonction du réseau neuronal convolutif [DW jour 3]
[Deep Learning from scratch] J'ai essayé d'expliquer la confirmation du gradient d'une manière facile à comprendre.
[Python] J'ai essayé de laisser LINE BOT répondre aux prévisions météo
Comment augmenter le nombre d'images de jeux de données d'apprentissage automatique
(Deep learning) J'ai collecté des images de l'API Flickr et essayé de discriminer en transférant l'apprentissage avec VGG16
Introduction au Deep Learning ~ Règles d'apprentissage ~
J'ai capturé le projet Toho avec Deep Learning ... je le voulais.
Apprentissage par renforcement profond 1 Introduction au renforcement de l'apprentissage
Mémo d'auto-apprentissage "Deep Learning from scratch" (partie 8) J'ai dessiné le graphique du chapitre 6 avec matplotlib
Comment utiliser le décorateur
Introduction au Deep Learning ~ Rétropropagation ~
[Deep Learning from scratch] À propos des couches requises pour implémenter le traitement de rétropropagation dans un réseau neuronal
Chapitre 1 Introduction à Python Découpez uniquement les bons points de Deeplearning à partir de zéro
[Apprentissage automatique] Comprenez à partir des mathématiques pourquoi le coefficient de corrélation varie de -1 à 1.
Version Lua Apprentissage profond à partir de zéro Partie 6 [Traitement d'inférence de réseau neuronal]
Comment utiliser l'apprentissage automatique pour le travail? 01_ Comprendre l'objectif de l'apprentissage automatique
[Python + heroku] De l'état sans Python à l'affichage de quelque chose avec heroku (Partie 1)
[Python + heroku] De l'état sans Python à l'affichage de quelque chose avec heroku (partie 2)
Deep learning / Deep learning from scratch 2 Chapitre 4 Mémo
Comment utiliser la fonction zip
Comment utiliser le module optparse
Deep learning / Deep learning made from scratch Chapitre 3 Mémo
Comment utiliser SWIG de WAF
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 5 Mémo
Introduction à l'apprentissage en profondeur ~ Approximation des fonctions ~
Essayez l'apprentissage en profondeur avec TensorFlow Partie 2
Apprentissage profond à partir de zéro (calcul des coûts)
Apprentissage profond pour démarrer sans GPU
Introduction à l'apprentissage profond ~ Préparation au codage ~
Publier une image de Python sur Tumblr
Utilisez l'API Flickr de Python
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 7 Mémo
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 8 Mémo
Deep learning / Deep learning made from scratch Chapitre 5 Mémo
Deep learning / Deep learning made from scratch Chapitre 4 Mémo
Deep learning / Deep learning from scratch 2 Chapitre 3 Mémo