データローダー(MinibatchSource, CTFDeserializer)

Microsoft Cognitive Toolkit(CNTK)におけるデータの準備と読み込みの過程で中心的な役割を果たすのが、**データローダー(MinibatchSource, CTFDeserializerなど)**です。これらはモデルの学習に必要なデータを効率よく供給するために使用されます。以下、それぞれの役割と使い方について詳しく説明します。


1. MinibatchSourceとは

MinibatchSourceは、CNTKにおけるデータの読み込みインターフェースであり、学習中にミニバッチ単位でデータを供給します。特徴は以下の通りです:

特徴

  • データを反復可能にし、シャッフルも可能

  • 複数のデシリアライザ(例:CTFDeserializer)を統合可能

  • 学習用と評価用で共通のインターフェースを持つ

使用例(Python)

python
from cntk.io import MinibatchSource, CTFDeserializer, StreamDef, StreamDefs features_dim = 100 label_dim = 10 mb_source = MinibatchSource(CTFDeserializer("train_data.ctf", StreamDefs( features = StreamDef(field='features', shape=features_dim), labels = StreamDef(field='labels', shape=label_dim) )), randomize=True)

2. CTFDeserializerとは

CTFDeserializerは、CNTK専用のテキスト形式である**CNTK Text Format(CTF)**のデータを読み込むためのクラスです。

CTF形式の例

plaintext
|features 0 1 2 3 4 |labels 1 0 0 0 0 |features 5 6 7 8 9 |labels 0 1 0 0 0

特徴

  • CTF形式は軽量で人間にも読みやすい

  • 各行は1つのサンプルを表す

  • |features|labelsなど、フィールド名でストリームを識別

使用方法(MinibatchSourceに渡して使用)

python
ctf_deserializer = CTFDeserializer("data/train.ctf", StreamDefs( features = StreamDef(field='features', shape=features_dim), labels = StreamDef(field='labels', shape=label_dim) )) mb_source = MinibatchSource(ctf_deserializer, randomize=True)

3. StreamDefとStreamDefsの役割

  • StreamDef:1つのデータストリーム(例:featuresやlabels)の定義を記述

  • StreamDefs:複数のStreamDefをまとめたコンテナ

これらによって、データファイル中のどのフィールドがどの形状で読み込まれるかを明示できます。


4. ミニバッチの取得

データをモデルに供給するには、以下のようにしてミニバッチを取得します:

python
minibatch = mb_source.next_minibatch(batch_size, input_map={input_var: mb_source.streams.features, label_var: mb_source.streams.labels})

まとめ

コンポーネント 役割
MinibatchSource ミニバッチ単位でデータを供給するインターフェース
CTFDeserializer CTF形式のデータを読み取るデシリアライザ
StreamDef(s) データの各ストリーム(特徴・ラベルなど)の構造を定義

CNTKではこのような設計により、高速かつ柔軟なデータ供給が可能になっています。

生成日:2025/05/23