RecordReader(CSVRecordReader、ImageRecordReaderなど)の使用

機械学習フレームワーク**Deeplearning4j(DL4J)**において、データの読み込みおよび前処理にはRecordReaderインターフェースが中核的な役割を果たします。これは、さまざまな形式のデータ(CSV、画像、時系列など)を統一された形式で読み込み、ニューラルネットワークに供給可能な形(DataSetIterator)に変換するための仕組みです。

以下に、主なRecordReaderの種類とその使用方法について詳しく説明します。


1. RecordReaderの役割

RecordReaderは、ファイルやデータソースから行(またはレコード)単位でデータを読み取り、Writableのリストとして出力します。これらのリストはその後、RecordReaderDataSetIteratorなどを通じて、ニューラルネットワークが扱えるDataSet形式に変換されます。


2. 主なRecordReaderの種類と使用例

2.1 CSVRecordReader

CSV形式の表形式データ(数値データやラベル付きデータ)を読み込むためのクラスです。

使用例

java
int skipLines = 1; // ヘッダーをスキップする行数 char delimiter = ','; RecordReader rr = new CSVRecordReader(skipLines, delimiter); rr.initialize(new FileSplit(new File("data/train.csv"))); int labelIndex = 4; // ラベルのカラム位置 int numClasses = 3; // クラス数 int batchSize = 64; DataSetIterator trainIter = new RecordReaderDataSetIterator(rr, batchSize, labelIndex, numClasses);

2.2 ImageRecordReader

画像ファイルとラベルを読み込み、画像をピクセル値のテンソルとして処理します。

使用例

java
int height = 28; int width = 28; int channels = 1; // グレースケール画像の場合 int numClasses = 10; File parentDir = new File("data/mnist"); // ラベルをディレクトリ名から取得するためのPathLabelGenerator ParentPathLabelGenerator labelMaker = new ParentPathLabelGenerator(); ImageRecordReader rr = new ImageRecordReader(height, width, channels, labelMaker); rr.initialize(new FileSplit(parentDir, NativeImageLoader.ALLOWED_FORMATS, new Random(123))); DataSetIterator trainIter = new RecordReaderDataSetIterator(rr, 64, 1, numClasses);

2.3 SequenceRecordReader

時系列データやシーケンスデータの読み込みに使用します。CSVなどの連続したデータファイルを、時間軸に沿って扱います。

使用例(CSVのシーケンスデータ)

java
SequenceRecordReader featureReader = new CSVSequenceRecordReader(1, ","); featureReader.initialize(new NumberedFileInputSplit("data/features_%d.csv", 0, 9)); SequenceRecordReader labelReader = new CSVSequenceRecordReader(1, ","); labelReader.initialize(new NumberedFileInputSplit("data/labels_%d.csv", 0, 9)); int numLabelClasses = 5; DataSetIterator seqIter = new SequenceRecordReaderDataSetIterator( featureReader, labelReader, 64, numLabelClasses, false, SequenceRecordReaderDataSetIterator.AlignmentMode.ALIGN_END );

3. データ前処理との連携

RecordReaderで読み込まれたデータは、NormalizerStandardizeImagePreProcessingScalerなどを用いて正規化やスケーリングが可能です。

例:画像のスケーリング

java
DataNormalization scaler = new ImagePreProcessingScaler(0, 1); scaler.fit(trainIter); trainIter.setPreProcessor(scaler);

まとめ

RecordReaderの種類 用途 対応フォーマット例
CSVRecordReader 数値やカテゴリのCSVデータ train.csvなど
ImageRecordReader ピクセル画像とラベルの読み込み JPEG, PNG, BMP
CSVSequenceRecordReader 時系列・連続CSVデータ sequence_0.csv など
その他(JSON, LibSVM等) 特殊なデータ形式にも対応可能 カスタムReaderの実装が必要

RecordReaderはDL4Jにおけるデータの統一インタフェースであり、DataSetIteratorと組み合わせて、ニューラルネットワークへの入力パイプラインを構築する重要な基盤です。用途に応じて適切なRecordReaderを選択し、正規化や整形を加えることで、効率的かつ柔軟なデータ前処理が可能になります。

生成日:2025/05/23