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.
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.
Sobald die App registriert ist, möchten wir diesmal extern auf Slack posten. Aktivieren Sie daher Incoming Webhooks.
Wenn Sie danach den Anweisungen auf dem Bildschirm folgen, wird der API-Schlüssel ausgegeben.
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.
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.)
Recommended Posts