[PYTHON] 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

introduction

Les débutants en Deep Learning ont essayé les prévisions météorologiques. Les raisons du choix du thème des prévisions météorologiques sont (1) l'image du satellite météorologique "Himawari" est disponible, la charge d'acquisition des données est faible et (2) la définition du problème est simple, il est donc facile pour les débutants de travailler. Parce que je pensais que c'était.

J'ai choisi Keras + (Tensorflow) pour la bibliothèque Deep Learning. Il existe de nombreuses bibliothèques de Deep Learning, mais en regardant l'exemple de code sur le Web, il semblait plus facile d'utiliser Keras, j'ai donc décidé de l'essayer avec Keras.

Cadre environnemental

Le PC que j'utilise habituellement a Windows 7. Tout d'abord, j'ai introduit Anaconda3 pour activer Python.

Après l'introduction d'Anaconda3, vous pourrez exécuter Python en lançant "Anaconda Prompt" depuis "Tous les programmes" ➔ "Anaconda3". Depuis le 24 mai 2017, il semble que Python 3.6 puisse être utilisé dans l'environnement par défaut. Pour le moment, Tensorflow ne semble pas prendre en charge Python 3.6, alors configurez d'abord Anaconda Prompt pour utiliser Python 3.5.

(C:\Users\IBM_ADMIN\Anaconda3) C:\Users\IBM_ADMIN>conda create -n py35 python=3.5 anaconda

(C:\Users\IBM_ADMIN\Anaconda3) C:\Users\IBM_ADMIN>activate py35

(py35) C:\Users\IBM_ADMIN>python --version
Python 3.5.2 :: Anaconda 4.3.1 (64-bit)

Vous êtes maintenant prêt à utiliser Python 3.5. Ensuite, nous présenterons Keras et Tensorflow.

(py35) C:\Users\IBM_ADMIN>pip install tensorflow
(py35) C:\Users\IBM_ADMIN>pip install keras

Puisque le backend n'est pas tensorflow par le paramètre par défaut de Keras, réécrivez la valeur de "backend" de ".keras / keras.json" dans le répertoire racine d'Anaconda Prompt comme suit.

{
    "floatx": "float32",
    "image_data_format": "channels_last",
    "backend": "tensorflow",
    "epsilon": 1e-07
}

Vous êtes maintenant prêt à utiliser Keras.

Préparation des données

L'image du satellite météorologique "Himawari" est disponible en téléchargement sur ici. Des images satellitaires météorologiques de juillet 2015 à aujourd'hui sont disponibles.

Lors de l'exécution d'une prévision météorologique en utilisant une image comme entrée, l'image sera d'un noir absolu à moins qu'il ne s'agisse d'une image de jour, et les prévisions météorologiques ne seront pas établies. En outre, l'Agence météorologique publie des données d'observation météorologique publiques toutes les 3 heures à partir de 0h00. Par conséquent, j'ai téléchargé les images à 9, 12 et 15 heures de manière uniforme à partir de chaque saison et j'ai acquis 1095 images comme données d'entraînement et 90 images comme données de test. Par exemple, un jour l'image satellite météorologique de l'archipel japonais est la suivante. hima820170617120000jp.png

Ensuite, créez un ensemble de données d'entraînement et un ensemble de données de test. Afin de faire des prévisions météorologiques en utilisant des images de satellites météorologiques, il est nécessaire de créer une application qui produit les prévisions météorologiques futures lorsqu'une image à un certain moment est entrée. Ainsi, quand on m'a donné une image satellite météorologique de l'archipel japonais à un moment donné, j'ai décidé de créer une application qui prédirait le temps à Tokyo 24 heures plus tard, et pour les images satellites météorologiques de chaque date et heure. J'ai décidé de donner les données d'observation de la météo 24 heures plus tard sous forme d'étiquette. Aussi, je pensais qu'il serait difficile de faire la distinction entre «nuageux» et «pluvieux» des images satellitaires météorologiques, j'ai donc décidé de prédire «ensoleillé» et «autre que ça» à partir des images.

Supposons que l'image satellite météorologique de 9 heures le 1er avril 2017 soit obtenue. D'autre part, l'étiquette que j'ai préparée est un fichier CSV au format ci-dessous. "1.0" est ensoleillé et "0.0" est un autre temps.

Date et l'heure,Le temps à Tokyo
2017/4/2 9:00,1.0
2017/4/2 12:00,1.0
2017/4/2 15:00,1.0
2017/4/3 9:00,0.0
2017/4/3 12:00,0.0

Après avoir préparé les données d'apprentissage et son étiquette de réponse correcte, ainsi que les données de test et son étiquette de réponse correcte, l'ensemble de données d'apprentissage et l'ensemble de données de test ont été créés à l'aide du programme suivant. Lorsque vous exécutez ce programme, un ensemble de données d'entraînement et un ensemble de données de test seront créés sous la forme d'un fichier nommé "data.pkl.gz" sous le répertoire où vous avez enregistré les étiquettes correctes pour les données d'entraînement.

import os
import numpy
import pandas
import pickle
from PIL import Image

train_data_src_dir = "Chemin absolu du répertoire dans lequel les données d'entraînement sont enregistrées"
train_label_csv = "Chemin absolu du libellé correct des données d'entraînement au format CSV"
test_data_src_dir = "Chemin absolu du répertoire dans lequel les données de test sont enregistrées"
test_label_csv = "Chemin absolu de l'étiquette correcte des données de test au format CSV"

def img2nparray(file):
    img = Image.open(file, "r")
    array = numpy.asarray(img, dtype="uint8")
    array = array.reshape(array.shape[0], array.shape[1], 1)
    return array

def get_label_set(file):
    labels = pandas.read_csv(file, encoding="shift-jis")
    labels = labels[labels["Le temps à Tokyo"].notnull()]
    
    return labels["Le temps à Tokyo"].as_matrix()
    

def generate_dataset():
    print("Generating train data set")
    master_dataset = []
    files = os.listdir(train_data_src_dir)
    for file in files:
        master_dataset.append(img2nparray(train_data_src_dir + file))
        
    master_dataset = numpy.array(master_dataset)
    train_label_set = get_label_set(train_label_csv)
    train_set = master_dataset, train_label_set
    
    print("Generating test data set")
    test_dataset = []
    files = os.listdir(test_data_src_dir)
    for file in files:
        test_dataset.append(img2nparray(test_data_src_dir + file))
        
    test_dataset = numpy.array(test_dataset)
    test_label_set = get_label_set(test_label_csv)
    test_set = test_dataset, test_label_set
    
    return (master_dataset, train_label_set), (test_dataset, test_label_set)

if __name__ == '__main__':
    dataset = generate_dataset()
    
    print("Creating pickle file")
    f = open(os.path.dirname(train_label_csv) + os.sep + 'data.pkl.gz', 'wb')
    binary = pickle.dump(dataset, f, protocol=2)
    f.close()
    print("Created")

Ceci termine la préparation des données.

Pratique de la prévision météorologique par image satellite météorologique

Maintenant, exécutons les prévisions météorologiques en utilisant les données préparées. Étant donné que les données d'entrée sont une image et que je voulais essayer facilement le Deep Learning, l'apprentissage et l'utilisation de la météo sont ici J'ai utilisé le programme pour distinguer les caractères manuscrits presque tels quels. En partie, la taille de l'image est modifiée en fonction des données que j'ai préparées. Nous avons également fixé le nombre de classes à 2 afin que nous puissions nous attendre à une valeur binaire de «ensoleillé» et «autre que ça». J'ai également apporté quelques modifications pour lire l'ensemble de données que j'ai créé à la place de l'ensemble de données MNIST.

Nous allons acquérir des données d'apprentissage uniformément de chaque saison, nous entraîner à l'aide du programme lié ci-dessus et pratiquer les prévisions météorologiques pour les images de test du 1er au 30 avril 2017 à 9, 12 et 15h00. En conséquence, le taux de réponse correcte était d'environ 65,5%, comme indiqué ci-dessous.

1095 train samples
90 test samples
Train on 1095 samples, validate on 90 samples
Epoch 1/12
1095/1095 [==============================] - 112s - loss: 1.8521 - acc: 0.4922 - val_loss: 0.6720 - val_acc: 0.6000
Epoch 2/12
1095/1095 [==============================] - 110s - loss: 0.6840 - acc: 0.5096 - val_loss: 0.6604 - val_acc: 0.6000
Epoch 3/12
1095/1095 [==============================] - 109s - loss: 0.6809 - acc: 0.5187 - val_loss: 0.6559 - val_acc: 0.6000
Epoch 4/12
1095/1095 [==============================] - 107s - loss: 0.6748 - acc: 0.5187 - val_loss: 0.6839 - val_acc: 0.7222
Epoch 5/12
1095/1095 [==============================] - 112s - loss: 0.6731 - acc: 0.5836 - val_loss: 0.6461 - val_acc: 0.6000
Epoch 6/12
1095/1095 [==============================] - 108s - loss: 0.6705 - acc: 0.5845 - val_loss: 0.6390 - val_acc: 0.6000
Epoch 7/12
1095/1095 [==============================] - 108s - loss: 0.6705 - acc: 0.5817 - val_loss: 0.6478 - val_acc: 0.6000
Epoch 8/12
1095/1095 [==============================] - 110s - loss: 0.6646 - acc: 0.6027 - val_loss: 0.6317 - val_acc: 0.6000
Epoch 9/12
1095/1095 [==============================] - 113s - loss: 0.6744 - acc: 0.5863 - val_loss: 0.6483 - val_acc: 0.7778
Epoch 10/12
1095/1095 [==============================] - 118s - loss: 0.6617 - acc: 0.6192 - val_loss: 0.6183 - val_acc: 0.6222
Epoch 11/12
1095/1095 [==============================] - 114s - loss: 0.6630 - acc: 0.6046 - val_loss: 0.6149 - val_acc: 0.6222
Epoch 12/12
1095/1095 [==============================] - 104s - loss: 0.6549 - acc: 0.6046 - val_loss: 0.6170 - val_acc: 0.6556
Test loss: 0.616963325606
Test accuracy: 0.655555557542

en conclusion

Cette fois, j'ai essayé de résumer comment les débutants en Deep Learning préparent un environnement d'exécution pour Deep Learning et testent les prévisions météorologiques. Le taux de réponse correcte est un résultat délicat de 65,5%, et il semble y avoir place à l'amélioration. Par exemple, il peut être possible d'améliorer la précision en donnant l'image la plus récente comme entrée au lieu de n'entrer que l'image il y a 24 heures.

Les prévisions météorologiques utilisant des images satellitaires météorologiques ont été pratiquées par d'autres [http://qiita.com/wbh/items/1984b582071ef60c92f3), je voudrais donc obtenir des conseils pour améliorer le taux de réponse correct à partir de ces informations à l'avenir. Je vais.

Recommended Posts

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
[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
J'ai essayé l'apprentissage en profondeur avec Theano
Un amateur a essayé le Deep Learning avec Caffe (Introduction)
Un amateur a essayé le Deep Learning avec Caffe (Vue d'ensemble)
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 16) J'ai essayé de créer SimpleConvNet avec Keras
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 17) J'ai essayé de créer DeepConvNet avec Keras
[Pour les débutants en apprentissage profond] Implémentation d'une classification binaire simple par couplage complet à l'aide de Keras
Collecte et automatisation d'images érotiques à l'aide du deep learning
Apprentissage profond à partir de zéro
J'ai essayé le deep learning
Examen de la méthode de prévision des échanges utilisant le Deep Learning et la conversion en ondelettes - Partie 2
Prédiction des ondes sinusoïdales à l'aide de RNN dans la bibliothèque d'apprentissage en profondeur Keras
J'ai essayé d'héberger un modèle d'apprentissage en profondeur de TensorFlow à l'aide de TensorFlow Serving
J'ai essayé d'implémenter Perceptron Part 1 [Deep Learning from scratch]
Apprentissage profond à partir de zéro 1 à 3 chapitres
J'ai essayé de rendre le deep learning évolutif avec Spark × Keras × Docker