メインコンテンツ

trainingProgressMonitor

深層学習カスタム学習ループの学習進行状況の監視およびプロット

R2022b 以降

    説明

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

    TrainingProgressMonitor オブジェクトを使用すると、次のことができます。

    • アニメーション化されたカスタム メトリクス プロットを作成し、学習時にカスタム メトリクスを記録する。

    • 学習時に学習情報を表示および記録する。

    • 早期に学習を停止する。

    • 進行状況バーで学習の進行状況を追跡する。

    • 経過時間を追跡する。

    次のイメージは、学習時の [学習の進行状況] ウィンドウの例を示しています。[学習の進行状況] ウィンドウの構成の詳細と、次の Figure を生成する方法を示す例については、Monitor Custom Training Loop Progressを参照してください。

    Training Progress window. The figure contains plots of the loss and accuracy for both the training and validation data, and information about the training progress, status, elapsed time, epoch number, execution environment, iteration, and learning rate.

    作成

    説明

    monitor = trainingProgressMonitor は、学習の進行状況を追跡し、学習プロットを作成するために使用できる TrainingProgressMonitor オブジェクトを作成します。

    monitor = trainingProgressMonitor(PropertyName=Value) は、1 つ以上の名前と値の引数を使用して、MetricsInfoVisibleProgressStatus、および XLabel のプロパティを設定します。

    プロパティ

    すべて展開する

    メトリクス名。string スカラー、文字ベクトル、string 配列として指定するか、文字ベクトルの cell 配列として指定します。有効な名前は文字で始まり、文字、数字、アンダースコアが含まれます。各メトリクスは、それ自身の学習サブプロットに表示されます。複数のメトリクスを 1 つのサブプロットにプロットするには、groupSubPlot 関数を使用します。

    例: ["TrainingLoss","ValidationLoss"];

    データ型: char | string | cell

    情報名。string スカラー、文字ベクトル、string 配列として指定するか、文字ベクトルの cell 配列として指定します。有効な名前は文字で始まり、文字、数字、アンダースコアが含まれます。これらの名前は [学習の進行状況] ウィンドウに表示されますが、学習プロットとしては表示されません。

    例: ["GradientDecayFactor","SquaredGradientDecayFactor"];

    データ型: char | string | cell

    この プロパティ は読み取り専用です。

    学習停止要求。数値または logical の 0 (false) または 1 (true) として指定します。[学習の進行状況] ウィンドウで [停止] ボタンをクリックすると、このプロパティの値は 1 に変わります。[停止] ボタンは、Visible プロパティを 'on' または 1 (true) に設定した場合にのみ表示されます。

    データ型: logical

    可視性の状態。'on' または 'off' として指定するか、数値または logical の 1 (true) または 0 (false) として指定します。'on' の値は true と等価であり、'off' の値は false と等価です。したがって、このプロパティの値を logical 値として使用できます。値は、matlab.lang.OnOffSwitchState 型の on/off の logical 値として保存されます。

    • 'on' — [学習の進行状況] ウィンドウを表示します。

    • 'off' — [学習の進行状況] ウィンドウを削除せずに非表示にします。非表示オブジェクトのプロパティにアクセスすることはできます。

    例: 'off'

    学習の進行率。範囲 [0, 100] のスカラーまたは dlarray オブジェクトとして指定します。

    例: 17;

    学習プロットの横軸ラベル。string スカラーまたは文字ベクトルとして指定します。

    例: "Iteration";

    データ型: char | string | cell

    学習ステータス。string スカラーまたは文字ベクトルとして指定します。

    例: "Running";

    データ型: char | string | cell

    この プロパティ は読み取り専用です。

    メトリクス値。構造体として指定します。構造体のフィールド名を指定するには、Metrics プロパティを使用します。各フィールドには 2 つの列をもつ行列が格納されます。最初の列にはカスタム学習ループのステップ値が格納され、2 番目の列には recordMetrics 関数によって記録されたメトリクス値が格納されます。

    データ型: struct

    この プロパティ は読み取り専用です。

    情報値。構造体として指定します。構造体のフィールド名を指定するには、Info プロパティを使用します。各フィールドは、updateInfo 関数によって更新された値を含む列ベクトルです。

    データ型: struct

    オブジェクト関数

    groupSubPlot学習プロットへのメトリクスのグループ化
    recordMetricsカスタム学習ループのメトリクス値の記録
    updateInfoUpdate information values for custom training loops
    yscaleSet training plot y-axis scale (linear or logarithmic)

    すべて折りたたむ

    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.

    TrainingProgressMonitor オブジェクトは、experiments.Monitor オブジェクトと同じプロパティとオブジェクト関数をもちます。そのため、実験マネージャーのセットアップ スクリプトで使用できるように、プロット コードを簡単に適応させることができます。

    学習を監視する方法は、学習を行う場所によって異なります。

    • カスタム学習ループ スクリプトを使用する場合は、TrainingProgressMonitor オブジェクトを自分で作成して管理しなければなりません。

    • カスタムの学習実験を使用する場合、実験マネージャーは、実験の各試行について experiments.Monitor オブジェクトを作成します。既定では、実験マネージャーexperiments.Monitor オブジェクトを変数 monitor として保存します。

    実験マネージャーでは、カスタム学習ループ コード内で TrainingProgressMonitor オブジェクトの代わりに experiments.Monitor オブジェクトを使用できます。

    たとえば、学習スクリプトで TrainingProgressMonitor オブジェクトを作成し、学習と検証の損失を追跡してプロットするとします。

    monitor = trainingProgressMonitor( ...
        Metrics=["TrainingLoss","ValidationLoss"], ...
        XLabel="Iteration");
    
    groupSubPlot(monitor,"Loss",["TrainingLoss","ValidationLoss"]);
    yscale(monitor,"Loss","log")
    
    iteration = 1;
    recordMetrics(monitor,iteration,TrainingLoss=loss,ValidationLoss=lossVal);

    experiments.Monitor オブジェクトと共に実験マネージャーで使用できるようにこのコードを適応させるには、次のようにします。

    • Name=Value 構文を使用してプロパティを設定しているコードを、ドット表記を使用するように変換します。

    • trainingProgressMonitor の呼び出しを削除します。これは、実験マネージャーがモニターを作成するためです。

    適応させたコードを実験マネージャーのセットアップ関数内で使用します。

    % Inside custom training experiment setup function
    
    monitor.Metrics=["TrainingLoss","ValidationLoss"];
    monitor.XLabel = "Iteration";
    
    groupSubPlot(monitor,"Loss",["TrainingLoss","ValidationLoss"]);
    yscale(monitor,"Loss","log")
    
    iteration = 1;
    recordMetrics(monitor,iteration,TrainingLoss=loss,ValidationLoss=lossVal);
    

    メモ

    実験マネージャーは、学習関数の 2 番目の入力引数として監視オブジェクトにアクセスします。2 番目の入力引数が監視オブジェクトの変数名と一致していることを確認する必要があります。詳細については、カスタム学習ループを使用したネットワークの学習、および可視化の表示を参照してください。

    ヒント

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

    • [学習の進行状況] ウィンドウで [停止] ボタンをクリックすると、Stop プロパティが 1 (true) に設定されます。これにより、Stop プロパティが 1 のときに学習ループが終了すると、学習が停止します。たとえば、早期停止を有効にするには、カスタム学習ループに次のコードを含めます。

      while numEpochs < maxEpochs && ~monitor.Stop    
      % Custom training loop code.   
      end

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

    バージョン履歴

    R2022b で導入