新しいデータによる推論(predictメソッド)

Deeplearning4j(DL4J)における「新しいデータによる推論(predictメソッド)」は、学習済みのモデルを用いて、未知の入力データに対する予測(分類や回帰など)を行うための機能です。以下に詳細を解説します。


1. 基本的な流れ

学習済みモデルに対して新しいデータを入力し、predictメソッドやoutputメソッドを使用して、出力(予測結果)を取得します。

一般的な手順

  1. 学習済みモデルの読み込み(ModelSerializer.restoreMultiLayerNetwork など)

  2. 新しいデータの前処理(正規化やNDArrayへの変換など)

  3. predict または output メソッドによる推論

  4. 結果の解釈・可視化


2. predict メソッドの使い方

predict メソッドは主に分類タスクで使用され、**ラベルのインデックス(整数値)またはラベル名(文字列)**を返します。

java
// モデルの読み込み MultiLayerNetwork model = ModelSerializer.restoreMultiLayerNetwork(new File("model.zip")); // 新しいデータの用意(1つのサンプル) INDArray newInput = Nd4j.create(new float[]{0.1f, 0.2f, 0.3f, 0.4f}, new long[]{1, 4}); // 特徴量が4つの場合 // 推論の実行 String[] prediction = model.predict(newInput); // 結果の表示 System.out.println("予測されたラベル: " + Arrays.toString(prediction));

3. output メソッドとの違い

  • predict():分類モデルにおいて、もっとも確率の高いクラスのラベルを返す(String[]int[]

  • output():各クラスに対するスコア(確率など)のベクトルを返す(INDArray

java
INDArray outputScores = model.output(newInput); System.out.println("全クラスのスコア: " + outputScores);

4. バッチ処理での使用

複数の入力に対してまとめて予測したい場合は、バッチ処理が可能です。

java
INDArray batchInput = Nd4j.create(new float[][] { {0.1f, 0.2f, 0.3f, 0.4f}, {0.5f, 0.6f, 0.7f, 0.8f} }); String[] predictions = model.predict(batchInput); for (int i = 0; i < predictions.length; i++) { System.out.println("サンプル" + i + "の予測: " + predictions[i]); }

5. ラベルのマッピング(Label Index ↔ Label Name)

学習時に使用したラベルのインデックスと名前の対応を把握しておく必要があります。通常、RecordReader で読み込んだ際の LabelGeneratorDataSetIterator.getLabels() を通じて取得できます。


6. 推論結果の可視化(簡易例)

Java環境ではJFreeChartなどを使って、分類結果の分布やスコアの棒グラフを表示することが可能です。可視化によりモデルの挙動や信頼性の理解が深まります。


まとめ

メソッド 用途 戻り値
predict() 分類のラベル予測 String[]またはint[]
output() クラスごとのスコア出力 INDArray

DL4Jのpredictは、分類タスクにおいて非常に直感的に利用可能であり、学習済みモデルを実際のアプリケーションに適用する際の中心的な役割を果たします。新しいデータに対して確実に正規化・整形を行った上で推論を行うことが、精度の高い結果を得る鍵となります。

生成日:2025/05/23