class chainer.training.Trainer(updater, stop_trigger=None, out='result')[source]

 Chainerにおける標準的な訓練ループ。

 

Trainerは訓練ループの実装です。ユーザは run() メソッドを呼び出すことで、訓練を実行できます。

訓練ループの各反復処理は、下記の用に進みます。

  • パラメータを更新する。この処理は、ミニバッチのロード、順方向の計算・逆方向の計算、更新関数の実行を含んでいます。この処理はすべて、Trainerが保持しているUpdateオブジェクトによって実行されます。
  • 優先度で降順にTrainerのExtensionを呼び出します。Triggerオブジェクトは各Extensionへ紐付けられ、各反復処理中でこのExtensionを実行すべきかどうか決定します。Trigger オブジェクトは 呼び出し可能なオブジェクトで、引数としてTrainerオブジェクトをとり、このExtensionが呼び出されるかどうかをBoolean値で返します。

Extensionは呼び出し可能なオブジェクトで、引数としてTrainerオブジェクトをとります。カスタムのExtensionを定義するのには、次の3つの方法があります。 Extension クラスを継承する、  make_extension()で関数をデコレートする、定義するラムダ式を含む呼び出し可能なものを定義する。カスタムのExtensionについてや、その設定方法についての詳細は Extension をお読みください。

 

ユーザは  extend() メソッドを呼び、TrainerにExtensionを登録でき、そこでいくつかの設定を加えることが出来ます。

  • Trigger オブジェクトは、上記しています。ほとんどの場合、 IntervalTrigger が用いられ、ユーザは簡潔にインターバルの長さとそのユニットをタプルで指定することができます。例えば、(1000, 'iteration') や (1, 'epoch')のようになります。
  • Extensionの実行順は、それらの優先度によって決定されます。優先度の高いExtensionが先に呼び出されます。優先度には3つの標準値があります。 
    • PRIORITY_WRITER:これは記録をExtensionsの優先度です。 observation 辞書に書き込むExtensionの優先度です。これは、Extensionが直接observationディレクトリへ値を書き込む場合や、Extensionがobservationディクショナリへ値を報告するために chainer.report() 関数を使用する場合を含みます。
    • PRIORITY_EDITOR. これは、すでに報告された値に基いて observation ディクショナリを編集する際のExtensionsの優先度です。
    • PRIORITY_READER. これは、observation ディクショナリから記録を読み込むだけの場合のExtensionの優先度です。これは、observation ディクショナリを利用しない場合のExtensionsにも適しています。

Trainerによって管理されるTrainerオブジェクトのカレントステートとオブジェクトは、Chainerの標準的なシリアル化プロトコルを通してシリアル化可能です。これは、訓練ループ中の一時停止や再開を簡単に可能にします。

 

Note

シリアル化は訓練ループの全てを復元しません。訓練中に変化したステートのみ復元します。  (Parameter, Optimizerステート、バッチ・イテレータ・ステート, Extension ステート等)。ステートをデシリアル化する前に、オブジェクトを正確に初期化しなければなりません。 

一方で、ユーザはデシリアル化の設定を変更出来るということでもあります。例えば、exitの条件はデシリアル化で変更可能なので、ユーザは合計で多数のイテレーションがある場合、幾つかのイテレーションでモデルを訓練し、一時停止し、それを再開できます。

 

訓練中、各更新で観測された値を格納するために Reporter オブジェクトも生成します。 これは、各イテレーションで、新たな観測値の辞書を生成し、それを observation 属性へ格納します。

 

各OptimizerのターゲットモデルのLinkはobserver(観測者/オブザーバ)としてReporter オブジェクトに登録されます。そこで各、 オブザーバは<optimizer name><link name>というフォーマットで構築されます。このLinkの名前は chainer.Link.namedlink() メソッドによって与えられ、階層における各Linkへのパスを表しています。 他のオブザーバは reporter 属性を介したReporterオブジェクトへのアクセスによって登録可能です。

 

デフォルトのTrainer はプレーン、つまりExtensionを一切含みません。

 

Parameters:
  • updater (Updater) – Updater オブジェクト。このモデルを更新する方法を定義している。
  • stop_trigger – 訓練ループをいつ停止するかを決定しているTrigger 。これが呼び出し不可能な場合、 IntervalTriggerへ渡される。
Variables:
  • updater – このTrainerのための、Updater オブジェクト
  • stop_trigger – 訓練ループをいつ停止するかを決定しているTrigger。訓練ループは、このトリガがTrue.を返す時、反復処理を停止する。
  • observation – 最後の更新時の観測データ。 詳細は Reporter クラスもお読みください。
  • out – アウトプットディレクトリ。
  • reporter –観測値を報告する Reporter オブジェクト 

 

 

Methods

extend(extension, name=None, trigger=None, priority=None, **kwargs)[source]

TrainerにExtensionを登録する。

 

Extension は呼び出し可能なオブジェクトで、対応するTriggerオブジェクトが反復処理をスキップすることを決定していなければ、各更新のあとで呼び出されます。この実行順序は、優先度によって決定されます。優先度の高いExtensionは、各反復処理で先に呼び出されます。優先度が Extensionでは、登録順に呼び出されます。

2つ以上のExtensionが同じ名前で登録された場合、 接尾辞が2つ目から最後までのExtensionの名前に加えられます。この接尾辞は _N で、NはExtensionの順番を示すの数字が入ります。

 

Extensionのインタフェースについては Extension をお読みください。

 

Parameters:
  • extension – 登録するExtension
  • name (str) – Extensionの名称。省略された場合、Extensionのdefault_name 属性 が代わりにもちいられる。この名前は、上記にも説明があるように、同じ名前をもつExtensionがある場合接尾辞が名前に加えられる。
  • trigger (tuple or Trigger) –いつExtensionを呼び出すか決定する Trigger オブジェクト。  Noneの場合、 extension.trigger が代わりに用いられる。 None とExtension がTrigger属性を持たない場合、このExtensionはデフォルトで全ての反復処理中にトリガが発生する。トリガが呼び出し不可能な場合、これはIntercalTriggerを構築するために、 IntervalTrigger へ渡される。
  • priority (int) – Invocation priority of the Extensionの優先度を発動。 Extensionは、各反復処理中において、優先度の降順で呼び出される。 Noneが選択されている場合、extension.priority が代わりに用いられる。
get_extension(name)[source]

与えられた名前のExtensionを返す。

 

Parameters: name (str) – Extensionの名称
Returns: Extension.

 

run(show_loop_exception_msg=True)[source]

訓練ループの実行。

 

このメソッドは Trainerの核です。モデルの訓練のループ全体を実行します。 

このメソッドは1つのTrainerオブジェクトに対して、複数は実行出来ませんのでご注意ください。

serialize(serializer)[source]

Attributes

elapsed_time

訓練にかかった総合時間。

 

この時間は2番めです。訓練がスナップショットから再開された場合、Trainerのカレントステートを取得するため、全ての事前訓練の時間が含まれます。