Main Content

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

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

  • 学习済みの予测性能。。

  • 最终エポック损失勾配を计算する学习の进行状况を。

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

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

こので,の数字のを分类するようようネットワークせせせますますます。。。。。。。。。。つのつのつのつのつのつのつのつのつの关数关数により,,,,がががががががががネットワークネットワークネットワークネットワークネットワークネットワークネットワークととととととととととととととととととととととととととととととととマネージャーをてイメージ用ネットワークにさ详细详细はは,ハイパーのスイープによる分类分类を参照しください。

メトリクス关数の定义

メトリクス関数を組み込みの学習実験に追加します。

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

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

  3. メトリクス関数の名前を選択して[编集]をmatlab®エディターエディターエディターで关数开き。。。

メトリクス关数のは,以下のののつのフィールドをもつ构造体。。

  • trainedNetworkは,关数trainNetworkによって返される系列网络オブジェクトまたはdagnetworkオブジェクトです。詳細については、netを参照しください。

  • 训练は,关数trainNetworkによって返さ情报を构造体です。について,,,信息を参照しください。

  • 参数は,パーテーブルのをもつ构造体です。

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

実験を开く

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

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

[説明]フィールドには、実験を説明するテキストが表示されます。この例の説明は次のようになります。

数字分类,使用度量函数评估结果: * OneSsevens返回1S错误分类为7s的百分比。*七杆菌返回7s错误分类为1s的百分比。

[ハイパー]セクションで,実験使用する(详尽的扫荡) とハイパーパラメーター値を指定します。実験を実行すると、実験マネージャーは、ハイパーパラメーター テーブルで指定されたハイパーパラメーター値のすべての組み合わせを使用してネットワークに学習させます。この例は、ハイパーパラメーターInitialLearnRateおよび势头を使用します。

[セットアップ関数]は,実験用の学習データ、ネットワーク アーキテクチャ、および学習オプションを構成します。セットアップ関数への入力は、ハイパーパラメーター テーブルのフィールドをもつ構造体です。このセットアップ関数は、イメージ分類問題用のネットワークに学習させるために使用する 3 つの出力を返します。この例では、セットアップ関数には 3 つのセクションがあります。

  • 学習データの読み込みでは,とデータを含むイメージストア定义し。。この例例でででははは,数字データセットセットからイメージイメージイメージイメージをををイメージ データセットを参照しください。

digitDatasetPath = fullfile(toolboxdir("nnet"),...“ nndemos”,,,,"nndatasets",,,,“ digitdataset”);Imdsrain= imageDatastore(digitDatasetPath,...IncludeSubfolders=true,...LabelSource =“折叠名称”);
NumTrainingFiles = 750;[imdstrain,imdsvalidation] = spliteachlabel(imdstrain,numTrainingfiles);
  • ネットワーク アーキテクチャの定義では,による用用畳み込みニューラルネットワークアーキテクチャを定义ます。このこの例例ででではは,セットアップセットアップテンプレートテンプレートによって指定指定指定さされたた

inputSize = [28 28 1];numClasses = 10;layers = [ImageInputlayer(Inputsize)卷积2Dlayer(5,20)batchnormalizationlayer relulayer plullConnectedLayedlayer(numClasses)soft -maxlayer classificationlayer];
  • "学習オプションの指定"では,実験用のtrainingOptionsオブジェクトをますこの例ではパーパラメーターテーブルからオプションオプションInitialLearnRate势头の値をます。

选项=训练("sgdm",,,,...maxepochs = 5,...ValidationData=imdsValidation,...ValidationFrequency=30,...InitialLearnRate=params.InitialLearnRate,...势头=params.Momentum,...Verbose=false);

セットアップ関数を検査するには、[セットアップ関数][编集]をクリックし。MATLAB® エディターでセットアップ関数が開きます。また、セットアップ関数のコードは、この例の最後の付録 1にあります。

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

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

  • Onesassevensは,済みが数字数字数字のののイメージをに误分类した割合を返します

  • 七肌は,ネットワーク数字数字数字数字数字ののををにに误分类し割合をを返し。

の关数,済みネットワークを使用して数字データをを分类分类ししますますます。。その,,これらこれらのの关数关数は,,実际ののラベルラベルラベルラベル予测ささささたたたラベルラベルラベルラベルラベル关数Onesassevensは,実際のラベルが"1"で,予測されたラベルが“ 7”であるイメージ数计算し。同様に,关数七肌は,実際のラベルが“ 7”で,予測されたラベルが"1"であるイメージをしますこれらのメトリクスのは,この例ののの付録 2付録 3にあります。

実験の実行

実験を実行すると、実験マネージャーはセットアップ関数で定義されたネットワークに 6 回学習させます。試行ごとに、ハイパーパラメーター値の異なる組み合わせが使用されます。既定では、実験マネージャーは一度に 1 つの試行を実行します。Parallel Computing Toolbox™ を使用している場合は、複数の試行を同時に実行したり、クラスター内のバッチ ジョブとして実験をオフロードしたりできます。

  • 一度に 1 つの実験を実行するには、実験マネージャー ツールストリップの[モード][Sequential]を选択し,[実行]をクリックし。

  • 複数の試行を同時に実行するには、[モード][同时]を选択し,[実行]をクリックし。現在の並列プールがない場合、実験マネージャーは既定のクラスター プロファイルを使用して並列プールを起動します。次に、実験マネージャーは、使用可能な並列ワーカーの数に応じて、複数の同時試行を実行します。最良の結果を得るには、実験を実行する前に、GPU と同じ数のワーカーで並列プールを起動します。詳細については、実験マネージャー使用しネットワークの并列学习リリース別の GPU サポート(并行计算工具箱)を参照しください。

  • 実験をジョブとしてするには,[モード][Batch Sequential]または[Batch Simultaneous]を选択し,[クラスター][Pool Size]を指定し,[実行]をクリックし。詳細については、Offload Experiments as Batch Jobs to Clusterを参照しください。

結果テーブルに、各試行のメトリクス関数の値が表示されます。

结果の评価

実験でたののを见つける见つける,结果テーブルを并べ替え。。たとえばたとえば,,,,,,,,,,,,,,,,のののの误分类のがが最も最も最も最も小さい小さい

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

  2. 三角形アイコンをクリック。。

  3. [升顺に]を选択し。

同様に、7 の誤分類の回数が最も小さい試行を見つけるには、[七奏曲]列のダウンメニューをてて[升顺に]を选択し。

両方の最小なる试行がががつもつも,のメトリクスに対するに対する顺位が良い试行试行を选択选択しててくださいください。tableMatlabワークワークスペースエクスポートし,ごとにににつのつの値の平均を计算计算。。。

  1. [実験]ツールストリップで,[エクスポート][结果]をクリックし。

  2. ダイアログでエクスポートたテーブルワークスペースの名前入力します。既定既定名前ははは结果是です。

  3. エクスポートしたネットワークを関数平均测量学(この例のの付録 4に掲载へ入力としてします。たとえばたとえば,,コマンドコマンドウィンドウ次次のように

AverageMetrics(结果稳定);

この関数は、メトリクスの平均値が最も低かった試行に関するメトリクス情報の概要を表示します。

************************************************
Best trial: 4 Ones misclassified as sevens: 1.3000% (Ranking: 3) Sevens misclassified as ones: 1.2000% (Ranking: 1) Average of metric values: 1.2500%
************************************************

実験结果観测を记录するに注釈を追加し。。

  1. 結果テーブルで、最適な結果が得られた試行の[Onesassevens]セルをクリックします。

  2. [注釈の]を选択し。

  3. [注釈]ペインでテキストに観测を入力し。。

  4. [七奏曲]セルについても上記の手順を繰り返します。

詳細については、実験结果并,フィルター,および注釈追加を参照しください。

実験を閉じる

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

付録 1: セットアップ関数

この関数は、実験用の学習データ、ネットワーク アーキテクチャ、および学習オプションを構成します。

入力

  • paramsは,マネージャーパーパラメーターテーブルのをもつ构造体です。

出力

  • Imdsrainは,データのイメージデータストア。。

  • は,ネットワークを定义层グラフです。

  • optionstrainingOptionsオブジェクトです。

function[imdsTrain,layers,options] = ClassificationExperiment_setup1(params) digitDatasetPath = fullfile(toolboxdir("nnet"),...“ nndemos”,,,,"nndatasets",,,,“ digitdataset”);Imdsrain= imageDatastore(digitDatasetPath,...IncludeSubfolders=true,...LabelSource =“折叠名称”);NumTrainingFiles = 750;[imdstrain,imdsvalidation] = spliteachlabel(imdstrain,numTrainingfiles);inputSize = [28 28 1];numClasses = 10;layers = [ImageInputlayer(Inputsize)卷积2Dlayer(5,20)batchnormalizationlayer relulayer plullConnectedLayedlayer(numClasses)soft -maxlayer classificationlayer];选项=训练("sgdm",,,,...maxepochs = 5,...ValidationData=imdsValidation,...ValidationFrequency=30,...InitialLearnRate=params.InitialLearnRate,...势头=params.Momentum,...Verbose=false);结尾

付录2:7として误分类れたたののの

この关数,,としてとしてされたたたの个数判别判别ます。

functionmetricOutput = OnesAsSevens(trialInfo) actualValue ="1";园艺=“ 7”;net = trialInfo.trainedNetwork; digitDatasetPath = fullfile(toolboxdir("nnet"),...“ nndemos”,,,,"nndatasets",,,,“ digitdataset”);imds = imageDatastore(digitDatasetPath,...IncludeSubfolders=true,...LabelSource =“折叠名称”);yactual = imds.labels;ypred =分类(net,imds);k = sum(yactual == realtervalue&ypred == predvalue);n = sum(yactual == cualterValue);metRicOutput = 100*k/n;结尾

付録 3: 1 として誤分類された 7 の検索

この关数,,として误分类れたたたの个数を判别し。。

functionmetricOutput = SevensAsOnes(trialInfo) actualValue =“ 7”;园艺="1";net = trialInfo.trainedNetwork; digitDatasetPath = fullfile(toolboxdir("nnet"),...“ nndemos”,,,,"nndatasets",,,,“ digitdataset”);imds = imageDatastore(digitDatasetPath,...IncludeSubfolders=true,...LabelSource =“折叠名称”);yactual = imds.labels;ypred =分类(net,imds);k = sum(yactual == realtervalue&ypred == predvalue);n = sum(yactual == cualterValue);metRicOutput = 100*k/n;结尾

付录4:メトリクス平均値计算计算

この関数は、結果テーブルからメトリクス値を抽出します。その後、この関数は、メトリクス平均値および各メトリクスの順位を結果テーブルに追加し、最適な結果が得られた試行に関するメトリクス情報の概要を表示します。

function结果= AverageMetrics(结果)Metric1 = Results.metrics.onesassevens;metric2 = results.metrics.sevensasones;metRicaverage =(metric1+metric2)/2;结果= [结果表(MetRicaverage,metric1,metric2)];n =高度(结果);结果= sortrows(结果,"Metric1");OnesassevenSranking =(1:n)';结果= [结果表(OneSassevenSranking)];结果= sortrows(结果,"Metric2");sevensasonesranking =(1:n)';结果= [结果表(SevensasonesRanking)];结果= sortrows(结果,“公制”);results = removevars(results,["Metric1",,,,"Metric2"]); fprintf(“ \ n ********************************************************** \ n \ n”);fprintf("Best trial: %d\n",结果(1));fprintf(“错误分类为Sevens:%.4F %%(排名:%d)\ n”,,,,...results.Metrics.OnesAsSevens(1),results.OnesAsSevensRanking(1)); fprintf("Sevens misclassified as ones: %.4f%% (Ranking: %d)\n",,,,...results.Metrics.SevensAsOnes(1),results.SevensAsOnesRanking(1)); fprintf("Average of metric values: %.4f%%\n",,,,...results.MetricAverage(1)); fprintf(“ \ n ********************************************************** \ n \ n”);结尾

参考

アプリ

关数

関連するトピック