Im vorherigen (3.) Zeichnen einer "wetterkartenähnlichen Front" durch maschinelles Lernen basierend auf Wetterdaten (3) Ich habe eine Geschichte über das Ausschneiden von Frontlinienelementen aus der "Breaking Weather Chart" gepostet, um ein Lehrerbild zu erstellen.
In dieser Geschichte (obwohl es eine ganz persönliche Angelegenheit ist) wurde die in der Vergangenheit angesammelte Schwarz-Weiß-Version der "Flash-Wetterkarte" verwendet, da der Zeitraum, für den die Farbversion der "Flash-Wetterkarte" zum Ausschneiden der Frontlinienelemente kurz war. Ich habe versucht, es zu kolorieren.
Kürzlich höre ich von Schwarz-Weiß-Fotografien und -Filmen, die durch maschinelles Lernen eingefärbt werden. In der Vergangenheit waren die Bilder während des Krieges, die keinen Sinn für die Realität hatten, überwiegend realistischer, und ich habe das Gefühl, dass sie sich mit einem Gefühl der gleichen Zeit nähern.
Die Färbung hat diesmal nichts mit einer solchen Geschichte zu tun, nur die Algorithmus-Situation der Frontelement-Extraktion.
In der Schwarzweißversion der Wetterkarte sind natürlich die Front-, Längen- und Breitengradlinien, Kartenlinien und isobaren Linien alle gleich schwarz. Daher konnte ich mir keinen guten Weg vorstellen, nur die Frontlinie von dort auszuschneiden, und es wurde notwendig, sie einzufärben.
Ich meine, was ich wirklich getan habe, ist in chronologischer Reihenfolge zu sagen
(1) Als Ausgabebild haben wir zuerst ein neuronales Netzwerk erstellt, das die Wetterkarte selbst als Lehrerbild lernt, ohne das Frontlinienelement auszuschneiden. Die Front wurde nicht gut gelernt. (2) Ich bemerkte die Existenz der Farbversion von "Breaking News Weather Map", als ich darüber nachdachte, wie die Elemente der Frontlinie extrahiert werden sollten, um das Lernziel auf die Frontlinie einzugrenzen. (3) Ich habe die verfügbare Farbversion von "Breaking News Weather Map" heruntergeladen und konnte das Frontlinienbild basierend auf der Farbe extrahieren. (4) Als ich mit einem Lehrerbild trainierte, das nur die Frontlinie enthielt, stellte ich fest, dass es bis zu einem gewissen Grad funktionieren würde, und beschloss, die Anzahl der Wetterkartenbeispiele zu erhöhen. Zu diesem Zeitpunkt war die Farbversion nur etwa ein halbes Jahr lang verfügbar. (5) Da das neuronale Netzwerk, das ich um diese Zeit erstellt habe, ein Bild aus einem Bild generiert, ist es möglicherweise möglich, eine Schwarzweiß-Wetterkarte in eine Farbwetterkarte umzuwandeln? Ich dachte.
Es war das. Da sich das bildneurale Netzwerk zu einem gewissen Grad vom Bild wegbewegte, fragte ich mich, ob es angewendet werden könnte.
Infolgedessen funktionierte dies besser als ich erwartet hatte.
Wir konnten die Anzahl der Lehrerbilder, die nur etwa ein halbes Jahr betrug, auf jeweils mehr als zwei Jahre erhöhen. Durch zwei Runden Frühling, Sommer, Herbst und Winter hat die Variation der Lehrerbilder zugenommen.
Mac mini(2018) Prozessor 3,2 GHz 6-Core Intel Core i7 Speicher 32 GB 2667 MHz DDR4
OS macOS Catalina python3.7 Keras 2.0
Wir benutzen.
Das Netzwerk, das ich erstellt habe, hat eine ziemlich einfache Struktur. Bei der sequentiellen Struktur handelt es sich um ein Netzwerk, das mit Conv2D Merkmale aus einem 1-Kanal-Graustufenbild extrahiert, es durch ein 4-stufiges CNN in der unteren Schicht leitet und es dann mit einer Conv2D-Transponierung zurückgibt, um ein 3-Kanal-Farbbild zu erstellen.
Das Eingabebild ist 256x256, aber ich habe die Schritte von Conv2D viermal reduziert, 16x16 gemacht und dann viermal Conv2D bestanden. Danach wird es von Conv2D Transpose auf die ursprüngliche Größe zurückgesetzt.
Da das Lernen "mean_squared_error" verwendet, ist es ein Lernen, das es als Pixelwert zum Lehrerbild bringt.
network.py
# parameter settings
num_hidden1 = 32
num_hidden2 = 64
num_hidden3 = 128
num_hidden4 = 64
num_hidden5 = 32
num_hidden6 = 32
######### start of network definition
NN_1 = Sequential()
#--- encode start
NN_1.add(Conv2D(num_hidden1, data_format='channels_first', kernel_size=(3,3), strides=(2,2), activation='relu', input_shape=(in_ch, i_dmlat, i_dmlon), padding='same'))
NN_1.add(Conv2D(num_hidden1, data_format='channels_first', kernel_size=(3,3), activation='relu', input_shape=(in_ch, i_dmlat, i_dmlon), padding='same'))
NN_1.add(Conv2D(num_hidden1, data_format='channels_first', kernel_size=(3,3), strides=(2,2), activation='relu', input_shape=(in_ch, i_dmlat, i_dmlon), padding='same'))
NN_1.add(Conv2D(num_hidden2, data_format='channels_first', kernel_size=(3,3), strides=(2,2), activation='relu', padding='same'))
NN_1.add(Conv2D(num_hidden2, data_format='channels_first', kernel_size=(3,3), activation='relu', padding='same'))
NN_1.add(Conv2D(num_hidden2, data_format='channels_first', kernel_size=(3,3), strides=(2,2), activation='relu', padding='same'))
#--- encode out
NN_1.add(Conv2D(num_hidden3, data_format='channels_first', kernel_size=(3,3), activation='relu', padding='same'))
NN_1.add(Conv2D(num_hidden3, data_format='channels_first', kernel_size=(3,3), activation='relu', padding='same'))
NN_1.add(Conv2D(num_hidden3, data_format='channels_first', kernel_size=(3,3), activation='relu', padding='same'))
NN_1.add(Conv2D(num_hidden3, data_format='channels_first', kernel_size=(3,3), activation='relu', padding='same'))
#--- decode start
NN_1.add(Conv2DTranspose(num_hidden4, data_format='channels_first', kernel_size=(3,3), strides=(2,2), activation='relu', padding='same'))
NN_1.add(Conv2DTranspose(num_hidden4, data_format='channels_first', kernel_size=(3,3), strides=(2,2), activation='relu', padding='same'))
NN_1.add(Conv2DTranspose(num_hidden5, data_format='channels_first', kernel_size=(3,3), strides=(2,2), activation='relu', padding='same'))
NN_1.add(Conv2DTranspose(num_hidden5, data_format='channels_first', kernel_size=(3,3), strides=(2,2), activation='relu', padding='same'))
NN_1.add(Conv2D(num_hidden5, data_format='channels_first', kernel_size=(3,3), activation='relu', padding='same'))
NN_1.add(Conv2D(num_hidden6, data_format='channels_first', kernel_size=(3,3), activation='relu', padding='same'))
#--- back to 3 channel
NN_1.add(Conv2D(3, data_format='channels_first', kernel_size=(3,3), activation='relu', padding='same'))
####### end of network definition
# compile network
NN_1.compile(optimizer='adam', loss='mean_squared_error' , metrics=['accuracy'])
# do training
NN_1.fit(np_i_data_train_tr, np_t_data_train_tr, epochs=num_itter , callbacks=cbks, batch_size=8 , validation_split=0.2 )
# Save model and weights
json_string = NN_1.to_json()
open(os.path.join(paramfiledir, 'cnnSPAStoColSPAS2_011_model.json'),'w').write(json_string)
NN_1.save_weights(os.path.join(paramfiledir, 'cnnSPAStoColSPAS2_011_weight.hdf5'))
Das Eingabebild ist beispielsweise (Flash-Wetterkarte 2018/9/30 21 UTC).
Das Bild des Ausgabelehrers ist wie folgt.
Von den Daten im Wert von sechs Monaten habe ich versucht, den Wert von zwei Monaten für die Auswertung zu verwenden, und die Schwarzweißversion und die Farbversion im Wert von etwa vier Monaten trainiert (mehr als 700 Blatt, da sechs Blätter pro Tag vorhanden sind).
Die Trainingsdaten konvergieren relativ schnell zu einem solchen Bild. Karten, Längen- / Breitengrade und Daten werden in kürzester Zeit überlernt.
Mit dem erlernten Netzwerk habe ich versucht, die tatsächliche Schwarz-Weiß-Wetterkarte einzufärben. Das rechte ist die ursprüngliche Schwarz-Weiß-Wetterkarte und das linke ist die kolorierte Wetterkarte. Ich denke, dass der Zweck des Ausschneidens des Frontlinienelements basierend auf der Farbe eine ausreichende Färbung ist.
Obwohl es sich um eine detaillierte Geschichte handelt, ist das Feld mit Datum und Uhrzeit oben links auch das Ergebnis des Lernens und Vorhersagen als Bild. Die Zahlen (Druck, Bewegungsgeschwindigkeit), die in der Wetterkarte erscheinen, scheinen direkt vorhergesagt zu werden. "Juli 2017" wird nur als "Januar 2018" als Krebs vorhergesagt. Da die für das Lernen verwendeten Daten ab 2018 stammen und den Juli nicht enthalten, "Ich kann nicht vorhersagen, was nicht in der Eingabe enthalten ist." Ich möchte sagen.
Das Gleiche wurde zu Heisei als Waffe für die Zeichenkette des Dekrets der Generation konvertiert. Es scheint, dass das Lernen so war, dass das Gewicht Null war und nur die Voreingenommenheit übrig blieb, so dass, was auch immer kommen würde, es Heisei sein würde.
Ich habe versucht, von Hand Unheil zu stiften (lacht). Das ist meine Schöpfung.
Ich habe auch versucht, es für Kinder zu zeichnen.
Es scheint, dass ich einen längeren Tag habe, um Frontlinien von Hand zu schreiben.
Diesmal habe ich die Geschichte der Kolorierung der Schwarz-Weiß-Wetterkarte zusammengefasst. Infolgedessen hat die Anzahl der Frontausschnittbilder erheblich zugenommen, und die Genauigkeit des Zeichnenlernens für das Endziel "wetterkartenähnlicher Fronten" hat sich verbessert.
Das nächste Mal werde ich als letzte Folge versuchen, durch maschinelles Lernen eine "wetterkartenähnliche Front" zu zeichnen, die auf dem neuronalen Netz zum Zeichnen der Frontlinie basiert [(5) Automatische Fronterkennung beim maschinellen Lernen in Wetterdaten](https: // qiita) Ich werde über .com / m-taque / items / 2788f623365418db4078) posten. Ab dem 2. Februar 2020 ist das monatliche Limit für die Veröffentlichung von Bildern auf der Qiita-Website erreicht, und die letzte Runde wird auf März übertragen.
Recommended Posts