データの前処理と形式(CNTKTextFormatなど)

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] ラベルに続くインデックス付きのスパース表現


例:画像分類(数値ベクトル)

text
|features 0:0.1 1:0.4 2:0.5|labels 0:1| |features 0:0.3 1:0.6 2:0.8|labels 1:1|
  • features:入力ベクトル(疎形式)

  • labels:ラベルベクトル(one-hot)


例:テキストデータ(単語ID列)

text
|input 0:1 1:3 2:7 3:4|labels 0:1| |input 0:2 1:6 2:1|labels 1:1|
  • input:トークンID列(語彙インデックス)

  • labels:分類ラベル


3. データの読み込み:MinibatchSourceCTFDeserializer

CNTKでは、データの読み込みは以下のように行います。

サンプルコード(Python)

python
import cntk.io.transforms as xforms from cntk.io import MinibatchSource, CTFDeserializer, StreamDefs, StreamDef reader = MinibatchSource(CTFDeserializer("train.ctf", StreamDefs( features = StreamDef(field='features', shape=3), labels = StreamDef(field='labels', shape=2) )), randomize=True)

解説

  • CTFDeserializer: .ctf形式のファイルを解析

  • StreamDefs: データの構造を定義(フィールド名とshape)

  • MinibatchSource: 学習時にバッチ単位でデータを供給


まとめ

項目 内容
前処理 正規化、エンコーディング、トークン化、パディング
主な形式 CNTKTextFormat(.ctf)
構造 各行がサンプル、フィールドはタブ区切り、値はスパース形式
読み込みAPI CTFDeserializer + MinibatchSource

CNTKでは、データ形式と前処理がトレーニングの成功に直結するため、構造の理解とデータ整備は非常に重要です。必要に応じて、NumPyやPandasなどで前処理スクリプトを自作することも推奨されます。

生成日:2025/05/23