trainerのextensionsについて
アドベントカレンダー20日目です。
今日はchainerのtrainer extensionsについて書いていきたいと思います。
Trainerについて
chainerのバージョン1.10.0でTrainerが実装されました。 従来は学習ループをがしがし記述していたのですが、Trainerはより抽象化されており、比較的簡単に学習の記述ができます。また、Trainer extesionsを使うことにより、様々な追加機能を使うことが出来ます。
Trainer Extensionsの一覧と公式の説明
簡易な説明はこちらで見ることが出来ます。
Trainer extensions — Chainer 3.2.0 documentation
chainer.training.extensions.dump_graph
Returns a trainer extension to dump a computational graph.chainer.training.extensions.Evaluator
Trainer extension to evaluate models on a validation set.chainer.training.extensions.ExponentialShift
Trainer extension to exponentially shift an optimizer attribute.chainer.training.extensions.LinearShift
Trainer extension to change an optimizer attribute linearly.chainer.training.extensions.LogReport
Trainer extension to output the accumulated results to a log file.chainer.training.extensions.observe_lr
Returns a trainer extension to record the learning rate.chainer.training.extensions.observe_value
Returns a trainer extension to continuously record a value.chainer.training.extensions.snapshot
Returns a trainer extension to take snapshots of the trainer.chainer.training.extensions.snapshot_object
Returns a trainer extension to take snapshots of a given object.chainer.training.extensions.ParameterStatistics
Trainer extension to report parameter statistics.chainer.training.extensions.PlotReport
Trainer extension to output plots.chainer.training.extensions.PrintReport
Trainer extension to print the accumulated results.chainer.training.extensions.ProgressBar
Trainer extension to print a progress bar and recent training status.
補足程度の説明
chainer.training.extensions.dump_graph
何も考えずに名前だけで推察すると、学習のグラフでも出してくれるのかな?って思いますが、実際はネットワークの計算グラフを出力します。長所なのか短所なのかdotで出力されるため、画像を確認するときは少し手間がかかります。chainer.training.extensions.Evaluator
テストデータを入力することでモデルの評価を行うことができます。ログをとるときにもこれを動かすとわかりやすいかもしれません。chainer.training.extensions.ExponentialShift
optimizerの数値を指数関数的に変化させていくことができる。これは結構便利そうに見えたので一度導入を試みたのですが、エラーを吐いてしまって以来使用していません。chainer.training.extensions.LinearShift
ExponentialShiftに対し、こちらはLinearにShiftします。使ったことがないのでわからないですが、ExponentialShiftとくらべてみたいところですね。chainer.training.extensions.LogReport
指定したタイミングごとに、ログをファイルに出力してくれます。これはかなり便利なので、Trainerを使うならほぼ間違いなく使うべきです。chainer.training.extensions.observe_lr
chainer.training.extensions.observe_value
この2つはいまいちよくわかりませんでした。使用例をみて今度考えてみましょう。chainer.training.extensions.snapshot
trainerのsnapshotsをとります。これも非常に便利なので使ったほうがいいです。これを使うと、学習の途中から再開することが可能となります。chainer.training.extensions.snapshot_object
先程のものに対し、こちらはmodelなどのObjectを保存するのに使えます。これもほぼ間違いなく使うべきです。chainer.training.extensions.ParameterStatistics
W/data/meanなどのパラメータ情報をレポートします。見た感じではいまいち便利なのかはわからなかった・・・。chainer.training.extensions.PlotReport
これはグラフを生成してくれます。logファイルを読んでグラフを生成するという作業が不要になるのかな?chainer.training.extensions.PrintReport
LogReportはログファイルを出力しますが、こちらはprintしてくれます。これも特に使わない理由はないと思います。chainer.training.extensions.ProgressBar
進捗状態のバーを出してくれます。ある程度精神衛生に優しいので、jupyterとかで学習してないときにはおすすめです。
まとめ
extensionsには色々便利な機能があるので、できるだけたくさん使ったほうが幸せになれるかもしれない。