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.
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.
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.
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.
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
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