Main Content

深層学習における学習の進行状況の監視

この例では、深層学習ネットワークの学習の進行状況を監視する方法を示します。

深層学習用にネットワークに学習させる場合、学習中にさまざまなメトリクスをプロットすることで、学習の進行状況を知ることができます。たとえば、ネットワークの精度が改善されているかどうか、その改善の速度、さらにネットワークで学習データへの過適合が始まっているかどうかを判定できます。

この例では、関数 trainnet を使用して学習させたネットワークの学習の進行状況を監視する方法を示します。カスタム学習ループを使用してネットワークに学習させる場合は、代わりにtrainingProgressMonitorオブジェクトを使用して学習中にメトリクスをプロットします。詳細については、Monitor Custom Training Loop Progressを参照してください。

trainingOptionsPlots 学習オプションを "training-progress" に設定してネットワークの学習を開始すると、関数 trainnet によって Figure が作成され、反復ごとに学習メトリクスが表示されます。各反復は、勾配の推定と、ネットワーク パラメーターの更新で構成されます。trainingOptions に検証データを指定すると、trainnet によってネットワークが検証されるたびに Figure に検証メトリクスが表示されます。Figure には、損失と、名前と値のオプション Metrics で指定した任意のメトリクスがプロットされます。既定では、ソフトウェアはプロットに線形スケールを使用します。Y 軸に対数スケールを指定するには、座標軸ツール バーの対数スケール ボタンを選択します。

学習中、右上隅の停止ボタンをクリックして学習を停止し、ネットワークの現在の状態を返すことができます。停止ボタンのクリックの後、学習が完了するまでしばらくかかることがあります。学習が完了すると、trainnet が学習済みネットワークを返します。

OutputNetwork 学習オプションを "best-validation" として指定すると、最適な検証メトリクス値での反復に対応する最終値が得られます。ここで、最適化されたメトリクスは ObjectiveMetricName 学習オプションで指定されます。最後の学習反復に対応する最終メトリクスを取得するには、OutputNetwork 学習オプションを "last-iteration" として指定します。

ペインの右側には、学習の時間と設定に関する情報が表示されます。学習オプションの詳細は、パラメーターの設定と畳み込みニューラル ネットワークの学習を参照してください。

学習の進行状況のプロットを保存するには、学習ウィンドウの [イメージとしてエクスポート] をクリックします。プロットは PNG、JPEG、TIFF、または PDF ファイルとして保存できます。座標軸ツール バーを使用して個々のプロットを保存することもできます。

学習時の進行状況のプロット

ネットワークに学習させ、学習中にその進行状況をプロットします。

MAT ファイル DigitsDataTrain.mat および DigitsDataTest.mat から学習データとテスト データをそれぞれ読み込みます。学習データ セットとテスト データ セットにはそれぞれ、5000 個のイメージが含まれています。

load DigitsDataTrain.mat
load DigitsDataTest.mat

dlnetwork オブジェクトを作成します。

net = dlnetwork;

分類分岐の層を指定し、それをネットワークに追加します。

layers = [
    imageInputLayer([28 28 1])
    convolution2dLayer(3,8,Padding="same")
    batchNormalizationLayer
    reluLayer   
    maxPooling2dLayer(2,Stride=2)
    convolution2dLayer(3,16,Padding="same")
    batchNormalizationLayer
    reluLayer
    maxPooling2dLayer(2,Stride=2)
    convolution2dLayer(3,32,Padding="same")
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(10)
    softmaxLayer];

net = addLayers(net,layers);

ネットワーク学習のオプションを指定します。学習中に一定の間隔でネットワークを検証するための検証データを指定します。精度と F 値のメトリクス値を記録します。学習中に学習の進行状況をプロットするには、Plots 学習オプションを "training-progress" に設定します。

options = trainingOptions("sgdm", ...
    MaxEpochs=8, ...
    Metrics = ["accuracy","fscore"], ...
    ValidationData={XTest,labelsTest}, ...
    ValidationFrequency=30, ...
    Verbose=false, ...
    Plots="training-progress");

ネットワークに学習をさせます。

net = trainnet(XTrain,labelsTrain,net,"crossentropy",options);

参考

| |

関連するトピック