LoginSignup
9

More than 5 years have passed since last update.

Keras の学習のようすを Slack に通知する

Posted at

image.png

最近よく Python の深層学習ライブラリ Keras でモデルの学習をしています。
深層学習では一般的にモデルの学習に時間がかかり、GPU (もしくはそれに類する強力な) サーバに常にログインしっぱなしでコンソールを確認しているわけでもないため、都度進捗を報告してくれたらありがたいです。

そこで、Keras のコールバック機能から Slack の WebAPI を叩いてチャットで通知を試みます。

Slack の WebAPI キーの取得

まずは必要な API キーを取得します。
Slack の API キーを取得する作業は、世の中に大量に資料が転がっていますし、公式のドキュメントも親切なので、サマリだけとします。

Slack 公式 から画面上部の「Start Building」ボタンを押します。
すると、APIキーを使用するアプリの名前 (適当で OK です。例えば「notifier」等) と、その API キーを使用したいチームを登録するポップアップが出現するので、適宜入力します。
image.png

アプリが登録できたら、今回は外部から Slack に投稿をしたいので、 Incoming Webhooks を有効にします。
貼り付けた画像_2017_04_26_14_49.png

あとは画面の案内に従っていけば API キーが発行されます。
貼り付けた画像_2017_04_26_14_51.png

API キーが発行されたら、サンプルコードが表示されるので、コピペして一度動作確認してみると良いでしょう。
貼り付けた画像_2017_04_26_14_53.png

Keras のコールバックの設定

Keras には LambdaCallback という、カスタムコールバックを簡単に生成できるクラスが用意されているので、それを使うだけで OK です:

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)

# あとはいつもどおり Keras のモデルの学習メソッドを呼ぶときに Callback を渡すだけ
history = model.fit_generator(train_generator, samples_per_epoch, nb_epoch, callbacks=callbacks,
                    validation_data=val_generator, nb_val_samples=nb_val_samples)

<your_key_here> の部分は、自分の API キーで置き換えてください。
また、 lossval_loss なにもしなくても存在しますが、他の指標も欲しい場合は、model.compile() メソッドの metrics 引数に渡せば、その名前で LambdaCallback 中でも参照することが出来ます。カスタムメトリクスの登録については Keras公式ドキュメントの該当ページ が参考になります。

上に貼ったコードからなんとなく伝わると思いますが、LambdaCallback には on_epoch_end のほかにも on_epoch_beginon_batch_end といったフックも用意されています。
もっとも、バッチごとに Slack に通知を飛ばされたら鬱陶しいので、この用途では使わないかもしれませんが。
(CSV 等にログをとる用途には便利かもしれませんね)

参考リンク

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9