Chainer は訓練用と評価用のデータセットの共通インタフェースをサポートしています。このデータセットのサポートは、データセット, イテレータ、バッチ変換関数の3つのコンポーネントから構成されています。
データセット は学習データ群です。このインタフェースは、ユーザが使用したいと考えるイテレータの組み合わせによって決定されます。Chainerのビルトインのイテレータは、このデータ・セットに __getitem__
と__len__
メソッドをサポートするよう要求しています。 特に、
__getitem__
メソッドはIntegerとスライスの両方のインデクシングをサポートしなければなりません。 ユーザがインデクシングのために get_example()
メソッドのみを実装しなければいけないような場合、DatasetMixin
を継承することで、簡単にスライスインデクシングをサポートすることができます。いくつかのイテレータでは、学習データの型にも制限があります。基本的に、データセットはステートレスなオブジェクトと考えられているので、訓練処理中のチェックポイントで保存する必要はありません。
イテレータ はデータセットと各Iterationを反復処理し、学習データのミニバッチをリストとして生成します。イテレータはPythonの標準イテレータプロトコルを含む Iterator
インタフェースをサポートしなければなりません。イテレータは次にどこを読みに行くのか管理します。つまり、イテレータはステートフルです。
バッチ変換関数はミニバッチをニューラルネットへフィードするための配列へ変換します。 また、それぞれの配列を適切なデバイスへ送る責任があります。Chainerは現在、 concat_examples()
をバッチ変換関数の唯一の例として提供しています。
これらのコンポーネントは全てカスタマイズ可能で、データセット型と、それらを操作する方法を限定することで最小限のインターフェースを持つようにデザインされています。とはいえ、Chainer自身によって提供されている実装は、大抵の使用方法をカバーしています。 Chainerは
軽量かつ管理が簡易なシステムであり、具体的なデータセットのサンプルを含んでいます。全てのデータセットはデータセットのルートディレクトリに保存されるようになっていて、環境変数 CHAINER_DATASET_ROOT
によって定義され、set_dataset_root()
関数によって、設定が可能です。
データセットの実装については Dataset examples(英語オリジナル) をご覧ください。
chainer.dataset.DatasetMixin | データセット・インデクシングのためのデフォルト実装 |
データセット・イテレータの実装について Iterator examples をご覧ください。
chainer.dataset.Iterator | データセット・イテレータの基底クラス |
chainer.dataset.concat_examples | データのリストを配列に結合する関数 |
chainer.dataset.to_device | 与えられたデバイスへ配列を送信する関数 |
chainer.dataset.get_dataset_root | データセットをダウンロードしキャッシュするルートディレクトリへのパスを取得する関数 |
chainer.dataset.set_dataset_root | データセットをダウンロードしキャッシュするルートディレクトリを設定する関数 |
chainer.dataset.cached_download | ファイルをダウンロードし、キャッシュする関数 |
chainer.dataset.cache_or_load_file | ファイルが存在していない場合、ファイルをキャッシュする、もしくはロードする関数 |