Extension & Triggerを活用しよう
@__t2kasa__ 髙木 士 (Tsukasa Takagi)
2018/06/09 Chainer Meetup #07 ~Chainer 3歳記念イベント~
自己紹介
 髙木 士 (Tsukasa Takagi)
 経歴
 ~2016 大阪大学 大学院電気電子情報工学専攻 修士課程
 2016~ キヤノン株式会社
 画像認識・物体検出・Windows デスクトップアプリ
 Twitter: @__t2kasa__
 Blog: http://t2kasa.sub.jp/
What is Extension & Trigger?
画像引用元:Chainer v4 ビギナー向けチュートリアル
https://qiita.com/mitmul/items/1e35fba085eb07a92560
• Extensionの実行タイミングを制御
Trigger
• モデルの評価・保存
• ログ・プロットの出力
• Optimizerのパラメータを更新
• 複数の学習結果の比較等 (ChainerUI)
• 物体検出結果を画像に重畳 (ChainerCV)
Extension
今回の発表
 実装されているExtension & Triggerを見直して何ができるのかを確認
 Extensionの作成例を2つ紹介
Triggerの種類
Early Stoppingの条件を満たしたとき
『ベスト』
『今までで最大』
『今までで最小』
になったとき
BestValueTrigger
MaxValueTrigger
 MinValueTrigger
ある値が
IntervalTrigger
TimeTrigger
指定したepoch/iterationを実行する度に
指定したepoch/iterationを実行する度に
ManualScheduleTrigger 指定したepoch/iterationになったとき
EarlyStoppingTrigger
Extensionの種類 (1/2)
モデルの評価・メトリクスの計算
 Evaluator
 MicroAverage
 FailOnNonNumber
 ParameterStatistics
 observe_lr
 observe_value
Optimizerのパラメータを変更
 ExponentialShift
 LinearShift
 snapshot
 snapshot_object
モデルの保存
ログ・プロット・計算グラフの出力
 PrintReport
 ProgressBar
 LogReport
 PlotReport
 VariableStatisticsPlot
 dump_graph
Chainer
Extensionの種類 (2/2)
物体検出・セグメンテーションの評価
 DetectionVOCEvaluator
 InstanceSegmentationVOCEvaluator
 SemanticSegmentationEvaluator
 DetectionVisReport
GT・予測の物体検出矩形の表示
機械翻訳の評価
 CalculateBleu
GANの画像生成
 make_image
ChainerCV
Examples
Learning rate schedule example:
Cyclical Learning Rate (CLR)
 CLRの実装例を紹介:学習率を周期的に変化させる
Leslie N. Smith: Cyclical Learning Rates for Training Neural Networks. WACV 2017: 464-472
https://arxiv.org/abs/1506.01186
GPUメモリ消費量グラフ (1/3)
 コード中のどこでどの程度GPUメモリを使用しているのかを見たい
 CuPyのLineProfileHook
https://docs-cupy.chainer.org/en/stable/reference/generated/cupy.cuda.memory_hooks.LineProfileHook.html
GPUメモリ消費量グラフ (2/3)
chainer/examples/mnist/
train_mnist.py で使ってみると…
なかなか見るのが大変
(左図は全体の約1/6程度)
GPUメモリ消費量グラフ (3/3)
https://github.com/t2kasa/mcg_chainer
Extensionでdot形式で
出力できるようにしてみました
trainer.extend(MemoryConsumptionGraph())
chainer/examples/mnist/
train_mnist.py で使ってみると…
なかなか見るのが大変
まとめ
 実装されているExtension & Triggerを再確認
 Extensionの作成例を2つ紹介

Extension & Triggerを活用しよう