[PYTHON] Deep Learning-Anfänger versuchten die Wettervorhersage aus meteorologischen Satellitenbildern mit Keras

Einführung

Deep Learning-Anfänger haben die Wettervorhersage ausprobiert. Die Gründe für die Wahl des Themas der Wettervorhersage sind: (1) das Bild des meteorologischen Satelliten "Himawari" ist verfügbar, die Datenerfassungslast ist gering und (2) die Problemstellung ist einfach, so dass Anfänger leicht daran arbeiten können. Weil ich dachte, dass es war.

Ich habe Keras + (Tensorflow) für die Deep Learning-Bibliothek ausgewählt. Es gibt viele Deep Learning-Bibliotheken, aber angesichts des Beispielcodes im Web schien es am einfachsten, Keras zu verwenden. Deshalb habe ich beschlossen, es mit Keras zu versuchen.

Umgebungseinstellung

Der PC, den ich normalerweise benutze, hat Windows 7. Zunächst habe ich Anaconda3 eingeführt, um Python zu aktivieren.

Nach der Einführung von Anaconda3 können Sie Python ausführen, indem Sie "Anaconda Prompt" über "Alle Programme" ➔ "Anaconda3" starten. Ab dem 24. Mai 2017 scheint Python 3.6 in der Standardumgebung verwendet werden zu können. Im Moment scheint Tensorflow Python 3.6 nicht zu unterstützen. Richten Sie daher zunächst Anaconda Prompt für die Verwendung von Python 3.5 ein.

(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)

Sie können jetzt Python 3.5 verwenden. Als nächstes werden wir Keras und Tensorflow vorstellen.

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

Da das Backend in der Standardeinstellung von Keras kein Tensorflow ist, schreiben Sie den Wert von "Backend" von ".keras / keras.json" wie folgt in das Stammverzeichnis von Anaconda Prompt.

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

Jetzt können Sie Keras verwenden.

Datenaufbereitung

Das Bild des meteorologischen Satelliten "Himawari" steht unter [hier] zum Download zur Verfügung (http://himawari8.nict.go.jp/ja/himawari8-image.htm). Meteorologische Satellitenbilder von Juli 2015 bis heute sind verfügbar.

Wenn Sie eine Wettervorhersage mit einem Bild als Eingabe durchführen, ist das Bild pechschwarz, es sei denn, es handelt sich um ein Tagesbild, und die Wettervorhersage wird nicht erstellt. Darüber hinaus veröffentlicht die Meteorologische Agentur alle 3 Stunden ab 0:00 Uhr Wetterbeobachtungsdaten öffentlich. Daher habe ich die Bilder aus jeder Saison gleichmäßig um 9, 12 und 15:00 Uhr heruntergeladen und 1095 Bilder als Trainingsdaten und 90 Bilder als Testdaten erfasst. Zum Beispiel ist eines Tages das meteorologische Satellitenbild des japanischen Archipels wie folgt. hima820170617120000jp.png

Erstellen Sie als Nächstes einen Trainingsdatensatz und einen Testdatensatz. Um Wettervorhersagen mit Bildern von meteorologischen Satelliten zu erstellen, muss eine Anwendung erstellt werden, die zukünftiges Wetter ausgibt, wenn ein Bild zu einem bestimmten Zeitpunkt eingegeben wird. Als ich irgendwann ein meteorologisches Satellitenbild des japanischen Archipels erhielt, beschloss ich, eine Anwendung zu erstellen, die das Wetter in Tokio 24 Stunden später vorhersagt, und für die meteorologischen Satellitenbilder jedes Datums und jeder Uhrzeit. Ich beschloss, die Beobachtungsdaten des Wetters 24 Stunden später als Etikett anzugeben. Außerdem dachte ich, es wäre schwierig, zwischen "bewölkt" und "regnerisch" von meteorologischen Satellitenbildern zu unterscheiden, und entschied mich daher, "sonnig" und "anders als das" aus den Bildern vorherzusagen.

Nehmen wir an, dass das meteorologische Satellitenbild ab 9 Uhr am 1. April 2017 erhalten wird. Andererseits ist das von mir erstellte Etikett eine CSV-Datei im folgenden Format. "1.0" ist sonnig und "0.0" ist anderes Wetter.

Datum (und Uhrzeit,Tokio Wetter
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

Nachdem die Trainingsdaten und das richtige Antwortetikett sowie die Testdaten und das richtige Antwortetikett auf diese Weise vorbereitet wurden, wurden der Trainingsdatensatz und der Testdatensatz mit dem folgenden Programm erstellt. Wenn Sie dieses Programm ausführen, werden ein Trainingsdatensatz und ein Testdatensatz als Datei mit dem Namen "data.pkl.gz" in dem Verzeichnis erstellt, in dem Sie die richtigen Bezeichnungen für die Trainingsdaten gespeichert haben.

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

train_data_src_dir = "Absoluter Pfad des Verzeichnisses, in dem die Trainingsdaten gespeichert sind"
train_label_csv = "Absoluter Pfad der korrekten Kennzeichnung der Trainingsdaten im CSV-Format"
test_data_src_dir = "Absoluter Pfad des Verzeichnisses, in dem die Testdaten gespeichert sind"
test_label_csv = "Absoluter Pfad der korrekten Kennzeichnung der Testdaten im CSV-Format"

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["Tokio Wetter"].notnull()]
    
    return labels["Tokio Wetter"].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")

Damit ist die Datenaufbereitung abgeschlossen.

Praxis der Wettervorhersage durch meteorologisches Satellitenbild

Lassen Sie uns nun die Wettervorhersage mit den vorbereiteten Daten ausführen. Da es sich bei den Eingabedaten um ein Bild handelt und ich Deep Learning einfach ausprobieren wollte, ist die Lern- und Wetternutzung hier. Ich habe das Programm verwendet, um handgeschriebene Zeichen fast so zu unterscheiden, wie sie sind. Zum Teil ändert sich die Größe des Bildes entsprechend den von mir vorbereiteten Daten. Wir setzen auch die Anzahl der Klassen auf 2, damit wir einen Binärwert von "sonnig" und "anders als das" erwarten können. Ich habe auch einige Änderungen vorgenommen, um den von mir erstellten Datensatz anstelle des MNIST-Datensatzes zu lesen.

Wir werden Lerndaten aus jeder Jahreszeit gleichmäßig erfassen, mit dem oben verlinkten Programm trainieren und Wettervorhersagen für Testbilder vom 1. bis 30. April 2017 um 9, 12, 15:00 Uhr üben. Infolgedessen betrug die korrekte Antwortrate etwa 65,5%, wie unten gezeigt.

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

abschließend

Dieses Mal habe ich versucht zusammenzufassen, wie Deep Learning-Anfänger eine Ausführungsumgebung für Deep Learning vorbereiten und die Wettervorhersage ausprobieren. Die richtige Antwortrate ist ein heikles Ergebnis von 65,5%, und es scheint Raum für Verbesserungen zu geben. Beispielsweise kann es möglich sein, die Genauigkeit zu verbessern, indem das aktuellste Bild als Eingabe angegeben wird, anstatt das Bild erst vor 24 Stunden einzugeben.

Wettervorhersagen mit meteorologischen Satellitenbildern wurden von anderen praktiziert [http://qiita.com/wbh/items/1984b582071ef60c92f3], daher möchte ich aus diesen Informationen in Zukunft Hinweise zur Verbesserung der korrekten Antwortrate erhalten. Ich werde.

Recommended Posts

Deep Learning-Anfänger versuchten die Wettervorhersage aus meteorologischen Satellitenbildern mit Keras
[Teil 4] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 1] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 3] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 2] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
Ich habe versucht, mit Theano tief zu lernen
Ein Amateur versuchte Deep Learning mit Caffe (Einführung)
Ein Amateur hat Deep Learning mit Caffe ausprobiert (Übersicht)
"Deep Learning from Grund" Memo zum Selbststudium (Nr. 16) Ich habe versucht, SimpleConvNet mit Keras zu erstellen
"Deep Learning from Grund" Memo zum Selbststudium (Nr. 17) Ich habe versucht, DeepConvNet mit Keras zu erstellen
[Für Anfänger im Deep Learning] Implementierung einer einfachen binären Klassifizierung durch vollständige Kopplung mit Keras
Sammlung und Automatisierung erotischer Bilder durch Deep Learning
Deep Learning von Grund auf neu
Ich habe versucht, tief zu lernen
Untersuchung der Austauschprognosemethode mit Deep Learning und Wavelet-Konvertierung - Teil 2-
Sinuswellenvorhersage mit RNN in der Deep-Learning-Bibliothek Keras
Ich habe versucht, ein Deep-Learning-Modell von TensorFlow mit TensorFlow Serving zu hosten
Ich habe versucht, Perceptron Teil 1 [Deep Learning von Grund auf neu] zu implementieren.
Deep Learning von Grund auf 1-3 Kapitel
Ich habe versucht, Deep Learning mit Spark × Keras × Docker skalierbar zu machen