Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

メトリクス関数を使用した深層学習実験の評価

この例では、メトリクス関数を使用して実験の結果を評価する方法を説明します。既定では、深層学習実験を実行すると、Experiment Managerによって、実験における各試行の損失、精度 (分類実験の場合)、および平方根平均二乗誤差 (回帰実験の場合) が計算されます。その他の尺度を計算するには、独自のメトリクス関数を作成します。たとえば、メトリクス関数を定義して次を行うことができます。

  • 学習済みネットワークの予測性能をテスト。

  • 最終エポックにおける検証損失の勾配を計算することによって学習の進行状況を評価。

  • 試行ごとに異なるネットワーク アーキテクチャを使用する実験で使用されるネットワークのサイズを表示。

各試行の学習が完了すると、実験マネージャーによってメトリクス関数が評価され、その値が結果テーブルに表示されます。

この例では、手書きの数字のイメージを分類するようネットワークに学習させます。2 つのメトリクス関数により、学習済みネットワークが 1 と 7 の数字のイメージをどの程度適切に識別するかを判定します。実験マネージャーを使用してイメージ分類用ネットワークに学習させる詳細については、Sweep Hyperparameters to Train a Classification Networkを参照してください。

メトリクス関数の定義

メトリクス関数を実験に追加します。

1. [実験] ペインの [メトリクス] で、[追加] をクリックします。

2. [メトリクスの追加] ダイアログ ボックスで、メトリクス関数の名前を入力して [OK] をクリックします。既にプロジェクトに存在する関数の名前を入力した場合、実験マネージャーによってその関数が実験に追加されます。そうでない場合は、既定のテンプレートによって定義された関数が実験マネージャーによって作成されます。

3. メトリクス関数の名前を選択して [編集] をクリックします。MATLAB エディターでメトリクス関数が開きます。

メトリクス関数への入力は、以下の 3 つのフィールドをもつ struct です。

  • trainedNetwork は、関数 trainNetwork によって返される SeriesNetwork オブジェクトまたは DAGNetwork オブジェクトです。詳細については、net を参照してください。

  • trainingInfo は、関数 trainNetwork によって返される学習情報を含む struct です。詳細については、info を参照してください。

  • parameters は、ハイパーパラメーター テーブルのフィールドをもつ struct です。

カスタム メトリクス関数の出力は、スカラー数、論理値、または文字列でなければなりません。

実験を開く

まず、例を開きます。実験マネージャーによって、検証と実行が可能な事前構成済みの実験を含むプロジェクトが読み込まれます。実験を開くには、[実験ブラウザー] で実験の名前 (ClassificationExperiment) をダブルクリックします。

実験の定義は、説明、ハイパーパラメーター テーブル、セットアップ関数、および、実験結果を評価するためのメトリクス関数の集合で構成されます。詳細については、Configure Deep Learning Experimentを参照してください。

[説明] ボックスには、実験を説明するテキストが表示されます。この例の説明は次のようになります。

Classification of digits, evaluating results by using metric functions:
- OnesAsSevens returns the percentage of 1s misclassified as 7s.
- SevensAsOnes returns the percentage of 7s misclassified as 1s.

[ハイパーパラメーター テーブル] には、実験で使用するハイパーパラメーターの名前と値が表示されます。実験を実行すると、実験マネージャーによってハイパーパラメーター値がスイープされ、ネットワークの学習が複数回実行されます。試行ごとに、テーブルで指定されたハイパーパラメーター値の異なる組み合わせが使用されます。この例は、ハイパーパラメーター InitialLearnRate および Momentum を使用します。

[セットアップ関数] は、実験用の学習データ、ネットワーク アーキテクチャ、および学習オプションを構成します。セットアップ関数を検査するには、[セットアップ関数][編集] をクリックします。MATLAB エディターでセットアップ関数が開きます。

この例では、セットアップ関数には 3 つのセクションがあります。

  • イメージ データの読み込みでは、学習データと検証データを含むイメージ データストアを定義します。この例では、数字データセットからイメージを読み込みます。このデータセットの詳細については、イメージ データセットを参照してください。

  • ネットワーク アーキテクチャの定義では、深層学習による分類用の畳み込みニューラル ネットワークのアーキテクチャを定義します。この例では、セットアップ関数テンプレートによって指定された既定の分類用ネットワークを使用します。

  • 学習オプションの指定では、実験用の trainingOptions オブジェクトを定義します。この例では、ハイパーパラメーター テーブルから学習オプション 'InitialLearnRate''Momentum' の値を読み込みます。

[メトリクス] セクションは、実験結果を評価するオプションの関数を指定します。ネットワークの学習が完了するたびに、実験マネージャーによってこれらの関数が評価されます。メトリクス関数を検査するには、メトリクス関数の名前を選択して [編集] をクリックします。MATLAB エディターでメトリクス関数が開きます。

この例には 2 つのメトリクス関数が含まれています。

  • OnesAsSevens は、学習済みネットワークが数字 1 のイメージを 7 に誤分類した割合を返します。

  • SevensAsOnes は、学習済みネットワークが数字イメージの 7 を 1 に誤分類した割合を返します。

これらの関数はそれぞれ、学習済みネットワークを使用して数字データセット全体を分類します。その後、これらの関数は、実際のラベルと予測されたラベルが一致しないイメージの数を判定します。たとえば、関数 OnesAsSevens は、実際のラベルが '1' で、予測されたラベルが '7' であるイメージの数を計算します。

function metricOutput = SevensAsOnes(trialInfo)
actualValue = '7';
predValue = '1';
net = trialInfo.trainedNetwork;
digitDatasetPath = fullfile(matlabroot,'toolbox','nnet', ...
    'nndemos','nndatasets','DigitDataset');
imds = imageDatastore(digitDatasetPath, ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');
YActual = imds.Labels;
YPred = classify(net,imds);
K = sum(YActual == actualValue & YPred == predValue);
N = sum(YActual == actualValue);
metricOutput = 100*K/N;
end

同様に、関数 SevensAsOnes は、実際のラベルが '7' で、予測されたラベルが '1' であるイメージの数を計算します。

実験の実行

[実験マネージャー] タブで、[実行] をクリックします。実験マネージャーによって、セットアップ関数で定義されたネットワークの学習が 6 回実行されます。試行ごとに、ハイパーパラメーターの異なる組み合わせが使用されます。結果テーブルに、各試行のメトリクス関数の値が表示されます。

結果の評価

実験で得られた最良の結果を見つけるには、結果テーブルを並べ替えます。たとえば、1 の誤分類の回数が最も小さい試行を見つけるには次のようにします。

  1. [OnesAsSevens] 列をポイントします。

  2. 三角形のアイコンをクリックします。

  3. [昇順に並べ替え] を選択します。

同様に、数字の 7 が誤分類された数が最も小さい試行を見つけるには、[SevensAsOnes] 列のドロップダウン メニューを開いて [昇順に並べ替え] を選択します。

両方のメトリクス関数が同時に最小となる試行が 1 つもない場合は、各メトリクスに対する順位が良い試行を優先してください。たとえばこの結果を見ると、試行 6 は各メトリクスに対して 2 番目に小さい値をもっています。

実験を閉じる

[実験ブラウザー] でプロジェクトの名前を右クリックし、[プロジェクトを閉じる] を選択します。実験マネージャーによって結果が保存され、プロジェクトに含まれるすべての実験が閉じられます。

参考

| |

関連するトピック