[PYTHON] Benachrichtigen Sie Slack darüber, wie Keras lernt

image.png

In letzter Zeit trainiere ich oft Modelle mit Keras, einer Deep-Learning-Bibliothek von Python. Deep Learning dauert im Allgemeinen lange, um das Modell zu trainieren, und ich melde mich nicht immer beim GPU-Server (oder einem ähnlich leistungsstarken Server) an, um die Konsole zu überprüfen. Ich würde mich freuen, wenn Sie den Fortschritt jedes Mal melden könnten. ist.

Drücken Sie in der Rückruffunktion von Keras auf Slacks WebAPI, um zu versuchen, eine Benachrichtigung per Chat zu erhalten.

Erhalten eines Slack WebAPI-Schlüssels

Holen Sie sich zunächst den erforderlichen API-Schlüssel. Die Aufgabe, einen API-Schlüssel für Slack zu erhalten, beschränkt sich auf eine Zusammenfassung, da es viele Materialien gibt und die offizielle Dokumentation freundlich ist.

Klicken Sie unter Slack Official oben auf dem Bildschirm auf die Schaltfläche "Build Building". Anschließend werden der Name der App angezeigt, die den API-Schlüssel verwendet (entsprechend und OK, z. B. "Benachrichtiger"), und das Popup, in dem das Team registriert wird, das den API-Schlüssel verwenden möchte. Geben Sie ihn entsprechend ein. image.png

Sobald die App registriert ist, möchten wir diesmal extern auf Slack posten. Aktivieren Sie daher Incoming Webhooks. 貼り付けた画像_2017_04_26_14_49.png

Wenn Sie danach den Anweisungen auf dem Bildschirm folgen, wird der API-Schlüssel ausgegeben. 貼り付けた画像_2017_04_26_14_51.png

Wenn der API-Schlüssel ausgegeben wird, wird der Beispielcode angezeigt. Es empfiehlt sich daher, ihn zu kopieren und einzufügen, um den Vorgang einmal zu überprüfen. 貼り付けた画像_2017_04_26_14_53.png

Keras-Rückrufeinstellungen

Keras bietet eine Klasse namens "LambdaCallback", mit der Sie auf einfache Weise benutzerdefinierte Rückrufe generieren können. Sie können sie also einfach verwenden:

import os

from keras.callbacks import LambdaCallback

hostname = os.uname()[1]

callbacks = []

slack_command = 'curl -X POST -H \'Content-type: application/json\' --data \'{{"text":"Here is {}.\nepoch:{:03d}, loss:{:.7f}, val_loss:{:.7f}"}}\' https://hooks.slack.com/services/<your_key_here>'
slack_callback = LambdaCallback(
    on_epoch_end=lambda epoch, logs: os.system(slack_command.format(hostname, epoch, logs['loss'], logs['val_loss'])))
callbacks.append(slack_callback)

#Alles, was Sie tun müssen, ist Callback zu übergeben, wenn Sie die Lernmethode des Keras-Modells wie gewohnt aufrufen.
history = model.fit_generator(train_generator, samples_per_epoch, nb_epoch, callbacks=callbacks,
                    validation_data=val_generator, nb_val_samples=nb_val_samples)

Ersetzen Sie "<Ihr_Schlüssel_Hier>" durch Ihren API-Schlüssel. Außerdem existieren loss und val_loss, ohne etwas zu tun. Wenn Sie jedoch andere Metriken möchten, können Sie diese an das Argumentmetrics der model.compile () -Methode übergeben und sie LambdaCallback nennen. `Sie können sich auch darauf beziehen. Informationen zur Registrierung benutzerdefinierter Metriken finden Sie unter Entsprechende Seite des offiziellen Keras-Dokuments.

Wie Sie dem obigen Code entnehmen können, hat "LambdaCallback" nicht nur "on_epoch_end", sondern auch Hooks wie "on_epoch_begin" und "on_batch_end". Es wäre jedoch ärgerlich, wenn Slack-Benachrichtigungen stapelweise übersprungen würden, sodass ich sie möglicherweise nicht für diesen Zweck verwenden würde. (Es kann praktisch sein, sich bei CSV usw. anzumelden.)

Referenzlink

Recommended Posts

Benachrichtigen Sie Slack darüber, wie Keras lernt
Benachrichtigen Sie Slack regelmäßig über verpasste Backlog-Probleme
Benachrichtigen Sie Slack, wenn der auf GCP ausgeführte maschinelle Lernprozess abgeschlossen ist
Ich habe versucht, Slack über das Update von Redmine zu informieren
Paralleles Lernen von Deep Learning durch Keras und Kubernetes
Benachrichtigen Sie Slack über Änderungen des Prozessstatus mithilfe des EventListener des Supervisors
Aufzeichnung der ersten Herausforderung des maschinellen Lernens mit Keras
Tensorflow / Keras-Zusammenfassung
Deep Learning 1 Übung des Deep Learning
Was ist Ensemble-Lernen?
Was ist maschinelles Lernen?
[TensorFlow 2 / Keras] Ausführen des Lernens mit CTC Loss in Keras
So erhöhen Sie die Anzahl der Datensatzbilder für maschinelles Lernen
Die Zusammenfassung des maschinellen Lernens in Python für Anfänger ist sehr kurz.