CSV, 画像, 時系列データの読み込み

機械学習フレームワークDeeplearning4j(DL4J)におけるデータの準備と前処理の中でも、「CSV」「画像」「時系列データ」の読み込みは、モデルの訓練に向けた重要なステップです。DL4Jでは、これらの処理にDataVecライブラリが用いられます。以下、それぞれのデータ形式ごとに詳しく解説します。


1. CSVデータの読み込み

CSVファイルは、数値やカテゴリデータなどの構造化データを扱う際によく使われます。

主なクラスと手順

  • RecordReader(例:CSVRecordReader

  • DataSetIterator(例:RecordReaderDataSetIterator

コード例

java
int numLinesToSkip = 1; char delimiter = ','; RecordReader recordReader = new CSVRecordReader(numLinesToSkip, delimiter); recordReader.initialize(new FileSplit(new File("data/train.csv"))); int labelIndex = 4; // ラベルの列番号 int numClasses = 3; // クラス数 int batchSize = 10; DataSetIterator iterator = new RecordReaderDataSetIterator(recordReader, batchSize, labelIndex, numClasses);

注意点

  • ラベルの位置やクラス数は明示的に指定する必要があります。

  • 正規化が必要な場合は、NormalizerStandardizeなどで正規化を追加します。


2. 画像データの読み込み

DL4Jでは、画像分類タスクに対応するための専用クラスが用意されています。

主なクラスと手順

  • NativeImageLoader

  • ParentPathLabelGenerator

  • ImageRecordReader

  • RecordReaderDataSetIterator

コード例

java
int height = 28; int width = 28; int channels = 1; int batchSize = 64; int numClasses = 10; File trainData = new File("data/images"); FileSplit fileSplit = new FileSplit(trainData, NativeImageLoader.ALLOWED_FORMATS, new Random(123)); ParentPathLabelGenerator labelMaker = new ParentPathLabelGenerator(); ImageRecordReader recordReader = new ImageRecordReader(height, width, channels, labelMaker); recordReader.initialize(fileSplit); DataSetIterator dataIter = new RecordReaderDataSetIterator(recordReader, batchSize, 1, numClasses);

注意点

  • 画像サイズやチャンネル数(グレースケール or RGB)を指定する必要があります。

  • パス名を使ったラベル付け(ディレクトリ名=ラベル)が一般的です。


3. 時系列データの読み込み

時系列データ(例:株価、センサー値など)では、系列データとしての整形が必要です。

主なクラスと手順

  • CSVSequenceRecordReader

  • SequenceRecordReaderDataSetIterator

コード例

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

注意点

  • 入力とラベルは同じ長さの時系列である必要があります。

  • ファイル名に連番が必要(features_0.csv など)。


補足:正規化の適用

すべての形式において、入力データのスケーリングが重要です。以下は代表的な正規化手法です。

java
DataNormalization normalizer = new NormalizerStandardize(); normalizer.fit(iterator); // 訓練データに基づき平均・分散を計算 iterator.setPreProcessor(normalizer);

まとめ

データ形式 使用クラス 特徴
CSV CSVRecordReader, RecordReaderDataSetIterator 数値・カテゴリデータに適用しやすい
画像 ImageRecordReader, NativeImageLoader ディレクトリ構造によるラベリング
時系列 CSVSequenceRecordReader, SequenceRecordReaderDataSetIterator シーケンス長の管理が重要

これらの前処理を通じて、DL4Jで効率的に学習可能な形式へとデータを変換することが可能になります。必要に応じて、DataVecを活用したカスタム変換も実装できます。

生成日:2025/05/23