機械学習とその他

機械学習したいマン

trainerのextensionsについて

アドベントカレンダー20日目です。

adventar.org

今日は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には色々便利な機能があるので、できるだけたくさん使ったほうが幸せになれるかもしれない。