メインコンテンツ

recordMetrics

カスタム学習ループのメトリクス値の記録

R2022b 以降

    説明

    recordMetrics(monitor,step,metricName=metricValue) は、学習プロットと TrainingProgressMonitor オブジェクト monitorMetricData プロパティに指定されたメトリクス値を記録します。

    recordMetrics(monitor,step,metricName1=metricValue1,...,metricNameN=metricValueN) は、複数のメトリクス値を記録します。

    recordMetrics(monitor,step,metricStructure) は、構造体 metricStructure によって指定されたメトリクス値を記録します。

    すべて折りたたむ

    TrainingProgressMonitor オブジェクトを使用して、学習の進行状況を追跡し、カスタム学習ループの学習プロットを生成します。

    TrainingProgressMonitor オブジェクトを作成します。モニターによって、開始時間と経過時間が自動的に追跡されます。オブジェクトを作成するとタイマーが開始されます。

    ヒント

    経過時間が学習時間を正確に反映するようにするには、必ずカスタム学習ループの先頭に近いところで TrainingProgressMonitor オブジェクトを作成してください。

    monitor = trainingProgressMonitor;

    学習を開始する前に、情報値とメトリクス値の名前を指定します。

    monitor.Info = ["LearningRate","Epoch","Iteration"];
    monitor.Metrics = ["TrainingLoss","ValidationLoss","TrainingAccuracy","ValidationAccuracy"];

    学習プロットの横軸のラベルを指定します。同じサブプロット内で、学習損失と検証損失をグループ化します。学習と検証の精度を同じプロットにグループ化します。

    monitor.XLabel = "Iteration";
    groupSubPlot(monitor,"Loss",["TrainingLoss","ValidationLoss"]);
    groupSubPlot(monitor,"Accuracy",["TrainingAccuracy","ValidationAccuracy"]);
    

    損失に対して対数スケールを指定します。座標軸ツール バーで対数スケール ボタンをクリックして Y 軸のスケールを切り替えることもできます。

    yscale(monitor,"Loss","log")

    学習時には、次のことが行われます。

    • カスタム学習ループの各ステップの開始時に Stop プロパティが評価されます。[学習の進行状況] ウィンドウで [停止] ボタンをクリックすると、Stop プロパティが 1 に変わります。Stop プロパティが 1 のとき、学習ループが終了すると学習が停止します。

    • 情報値が更新されます。更新された値は [学習の進行状況] ウィンドウに表示されます。

    • メトリクス値が記録されます。記録された値は学習プロットに表示されます。

    • 反復が完了した割合に基づいて、学習の進行率が更新されます。

    メモ

    次のサンプル コードはテンプレートです。メトリクス値と情報値を計算するには、この学習ループを編集しなければなりません。MATLAB で実行できる完全な例については、Monitor Custom Training Loop Progress During Trainingを参照してください。

    epoch = 0;
    iteration = 0;
    
    monitor.Status = "Running";
    
    while epoch < maxEpochs && ~monitor.Stop
        epoch = epoch + 1;
    
        while hasData(mbq) && ~monitor.Stop
            iteration = iteration + 1;
    
            % Add code to calculate metric and information values.
            % lossTrain = ...
    
           updateInfo(monitor, ...
                LearningRate=learnRate, ...
                Epoch=string(epoch) + " of " + string(maxEpochs), ...
                Iteration=string(iteration) + " of " + string(numIterations));
    
           recordMetrics(monitor,iteration, ...
                TrainingLoss=lossTrain, ...
                TrainingAccuracy=accuracyTrain, ...
                ValidationLoss=lossValidation, ...
                ValidationAccuracy=accuracyValidation);
    
            monitor.Progress = 100*iteration/numIterations;
        end
    end

    [学習の進行状況] ウィンドウには、メトリクスのアニメーション プロット、情報値、学習の進行状況バー、経過時間が表示されます。

    • 学習プロットは、recordMetrics を呼び出すたびに更新されます。

    • [情報] の下の値は、updateInfo を呼び出すたびに更新されます。

    • 経過時間は、recordMetrics または updateInfo を呼び出すたび、および Progress プロパティを更新するたびに更新されます。

    Training Progress window. The first plot shows the training and validation loss and the second plot shows the training and validation accuracy.

    構造体を使用してメトリクス値を記録します。

    structure.TrainingLoss = trainingLoss;
    structure.ValidationLoss = validationLoss;
    recordMetrics(monitor,iteration,structure);

    入力引数

    すべて折りたたむ

    学習の進行状況モニター。TrainingProgressMonitor オブジェクトとして指定します。

    反復回数やエポック数などのカスタム学習ループ ステップ。数値スカラーまたは dlarray オブジェクトとして指定します。ソフトウェアは、この値を学習プロットの x 座標として使用します。

    メトリクス名。string スカラーまたは文字ベクトルとして指定します。この入力は、monitorMetrics プロパティの要素でなければなりません。

    データ型: char | string | cell

    メトリクス値。数値スカラーまたは dlarray オブジェクトとして指定します。ソフトウェアは、この値を学習プロットの y 座標として使用します。

    メトリクスの名前と値。構造体として指定します。名前は、monitorMetrics プロパティの要素でなければなりません。構造体内では任意の順序で名前を記述できます。

    例: struct(TrainingLoss=trainingLoss,ValidationLoss=validationLoss)

    データ型: struct

    ヒント

    • 情報値は [学習の進行状況] ウィンドウに表示され、学習プロットにはメトリクス値の記録が表示されます。学習ウィンドウには表示する必要があるものの学習プロットには表示したくないと考えているテキストや数値については、情報値を使用してください。

    • groupSubPlot 関数を使用して、複数のメトリクスを 1 つの学習サブプロットにグループ化します。

    バージョン履歴

    R2022b で導入