ChainerのExtensionとは?
ChainerのTrainerを実行している途中に適宜実行してくれる素敵な拡張機能
Trainer extensions — Chainer 3.2.0 documentation
Chainerで用意されているものについては昔一通り動かしてみた。
ensekitt.hatenablog.com
自分のExtensionがほしい!
というわけで、Twitterに学習状況をツイートするExtensionを作ってみた。
Twitterの設定部分
import os import twitter TOKEN = os.environ["DTA_TWITTER_TOKEN"] TOKEN_SECRET = os.environ["DTA_TWITTER_TOKEN_SECRET"] CONSUMER_KEY = os.environ["DTA_TWITTER_CONSUMER_KEY"] CONSUMER_SECRET = os.environ["DTA_TWITTER_CONSUMER_SECRET"] twi = Twitter( auth = OAuth(TOKEN, TOKEN_SECRET, CONSUMER_KEY, CONSUMER_SECRET))
Extensionの部分
def myTweetExtension(target_epoch, _log_report='LogReport'): @training.make_extension() def tweet(trainer): print("My Extension!!") #これはテキストを標準出力する log_report = trainer.get_extension(_log_report) #Log Reportの情報を拾ってくる if len(log_report.log) > 0: plog = log_report.log[len(log_report.log)-1] # 最新のログをひろう e = plog['epoch'] te = target_epoch ls = round(plog['main/loss'], 6) t = round(plog['elapsed_time'],2) status = "インテリジェントなスーパーAI「えぽっく:{0}/{1}, ろす:{2}, じかん:{3}[s]」".format(e,te,ls,t) #整形する res = twi.statuses.update(status=status) # ツイートする return tweet
Trainerに追加する部分
# 自分で作ったエクステンション interval = (50, 'epoch') # インターバルを50Epochに1回に設定 trainer.extend(myTweetExtension(epoch), trigger=interval)
その他のコード(Jupyter Notebook)
ツイート出来ました
インテリジェントなスーパーAI「えぽっく:49/100, ろす:5.6e-05, じかん48.71」
— えんせき以下略 (@EnsekiTT) 2017年11月9日
インテリジェントなスーパーAI「えぽっく:99/100, ろす:3.8e-05, じかん98.14」
— えんせき以下略 (@EnsekiTT) 2017年11月9日