Microsoft Cognitive Toolkit(CNTK)において、学習に使用するデータの「前処理」と「形式」は、効率的かつ正確なトレーニングを行うために極めて重要です。ここでは、CNTKにおける一般的なデータ前処理手順と、よく使われる**データ形式(特にCNTKTextFormat)**について詳しく説明します。
1. データ前処理(Preprocessing)
CNTKでは、以下のような前処理ステップが必要です。
(1) 正規化(Normalization)
数値データや画像データは、学習効率のために値のスケールを統一します。例として:
-
画像ピクセル値(0–255)を
[0,1]にスケーリング -
特徴量を z-score(平均0、分散1)に正規化
(2) ラベルエンコーディング
分類問題では、カテゴリラベルをone-hotエンコーディングします。
-
例:カテゴリ「cat, dog, bird」 →
[1 0 0], [0 1 0], [0 0 1]
(3) トークン化(自然言語処理)
テキストデータの場合、単語または文字単位でトークン化を行い、語彙辞書(vocabulary)に従ってインデックスに変換します。
(4) シーケンスパディング
LSTMやRNNで可変長の入力を扱うためには、最大長に揃えるパディング処理が必要です。
2. データ形式:CNTKTextFormat
CNTKでは複数のデータ形式をサポートしていますが、最も一般的なのが CNTKTextFormat(拡張子:.ctf)です。
特徴
-
テキストファイル形式
-
各行が1つのデータサンプル(ミニバッチで読み込み可能)
-
複数のフィールド(入力、ラベルなど)をタブ区切りで記述
-
各フィールドは
[name]ラベルに続くインデックス付きのスパース表現
例:画像分類(数値ベクトル)
-
features:入力ベクトル(疎形式) -
labels:ラベルベクトル(one-hot)
例:テキストデータ(単語ID列)
-
input:トークンID列(語彙インデックス) -
labels:分類ラベル
3. データの読み込み:MinibatchSourceとCTFDeserializer
MinibatchSourceとCTFDeserializerCNTKでは、データの読み込みは以下のように行います。
サンプルコード(Python)
解説
-
CTFDeserializer:.ctf形式のファイルを解析 -
StreamDefs: データの構造を定義(フィールド名とshape) -
MinibatchSource: 学習時にバッチ単位でデータを供給
まとめ
| 項目 | 内容 |
|---|---|
| 前処理 | 正規化、エンコーディング、トークン化、パディング |
| 主な形式 | CNTKTextFormat(.ctf) |
| 構造 | 各行がサンプル、フィールドはタブ区切り、値はスパース形式 |
| 読み込みAPI | CTFDeserializer + MinibatchSource |
CNTKでは、データ形式と前処理がトレーニングの成功に直結するため、構造の理解とデータ整備は非常に重要です。必要に応じて、NumPyやPandasなどで前処理スクリプトを自作することも推奨されます。
生成日:2025/05/23