メインコンテンツ

trainingOptions

R2026b

深層学習ニューラル ネットワークの学習のオプション

説明

options = trainingOptions(solverName) は、指定されたソルバーの学習オプションを返します。この学習オプション オブジェクトは、trainnet 関数などの深層学習用学習関数と組み合わせて使用します。

options = trainingOptions(solverName,Name=Value) は、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、traininrgOptions("adam",Plots="training-progress") は、Adam ソルバーを使用して学習を行い、学習の進行状況をプロットに表示します。

例

例

すべて折りたたむ

モーメンタム項付き確率的勾配降下法を使用したネットワーク学習の一連のオプションを作成します。5 エポックごとに 0.2 ずつ学習率を下げます。学習のエポックの最大回数を 20 に設定し、反復ごとに 64 個の観測値があるミニバッチを使用します。学習の進行状況プロットをオンにします。

options = trainingOptions("sgdm", ...
    LearnRateSchedule="piecewise", ...
    LearnRateDropFactor=0.2, ...
    LearnRateDropPeriod=5, ...
    MaxEpochs=20, ...
    MiniBatchSize=64, ...
    Plots="training-progress");

入力引数

すべて折りたたむ

ニューラル ネットワークの学習用のソルバー。次のいずれかの値として指定します。

確率的ソルバー

確率的ソルバーは、データのミニバッチを反復処理し、反復処理を行うたびにニューラル ネットワークの学習可能なパラメーターを更新します。確率的ソルバーは、大規模なデータ セットに適しています。その他の学習オプションについては、確率的ソルバーのオプションを参照してください。

値ソルバー名詳細
"sgdm"モーメンタム項付き確率的勾配降下法 (SGDM)

モーメンタム項付き確率的勾配降下法.

"rmsprop"平方根平均二乗伝播 (RMSProp)

平方根平均二乗伝播.

"adam"適応モーメント推定 (Adam)

適応モーメント推定.

バッチ ソルバー

バッチ ソルバーは、各反復処理でデータ セット全体を処理します。バッチ ソルバーは、単一のバッチで処理できる小規模なネットワークやデータ セットに適しています。その他の学習オプションについては、バッチ ソルバーのオプションを参照してください。

値ソルバー名詳細
"lbfgs" (R2023b 以降)メモリ制限 Broyden–Fletcher–Goldfarb–Shanno (L-BFGS)

メモリ制限 BFGS.

"lm" (R2024b 以降)レーベンバーグ・マルカート (LM)

trainnet 関数の lossFcn 引数は "mse" または "l2loss" でなければなりません。

詳細については、レーベンバーグ・マルカートを参照してください。

名前と値の引数

すべて展開する

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: trainingOptions("adam",Plots="training-progress") は、Adam ソルバーを使用して学習を行い、学習の進行状況をプロットに表示します。

監視

すべて展開する

ニューラル ネットワークの学習中に表示するプロット。次のいずれかの値として指定します。

  • "none" — 学習中にプロットを表示しません。

  • "training-progress" — 学習の進行状況をプロットします。

プロットの内容は、使用するソルバーによって異なります。

  • 引数 solverName が "sgdm"、"adam"、または "rmsprop" の場合、プロットには、ミニバッチ損失、検証損失、Metrics オプションで指定された学習ミニバッチと検証のメトリクス、および学習の進行状況に関する追加情報が表示されます。

  • solverName 引数が "lbfgs" または "lm" の場合、プロットには、学習と検証の損失、Metrics オプションで指定された学習と検証のメトリクス、および学習の進行状況に関する追加情報が表示されます。

学習後にプログラムで学習の進行状況プロットを開いたり閉じたりするには、関数 trainnet の 2 番目の出力で関数 show および close を使用します。Plots 学習オプションが "none" として指定されている場合でも、関数 show を使用して学習の進行状況を表示できます。

Y 軸のスケールを対数に切り替えるには、座標軸ツールバーを使用します。Training plot axes toolbar with log scale enabled and the tooltip "Log scale y-axis".

プロットの詳細については、深層学習における学習の進行状況の監視を参照してください。

R2023b 以降

監視するメトリクス。次のうちの 1 つ以上として指定します。

  • 組み込みメトリクス名またはオブジェクト。string スカラー、文字ベクトル、またはメトリクス オブジェクトとして指定します。

  • 組み込み損失関数名。string スカラーまたは文字ベクトルとして指定します。

  • カスタム メトリクス。関数ハンドル、メトリクス オブジェクト、またはカスタム深層学習関数オブジェクトとして指定します。

複数のメトリクスを指定するには、string 配列または cell 配列を使用します。

深層学習のメトリクスと損失関数の詳細については、Deep Learning Metricsを参照してください。

組み込みメトリクス

組み込みメトリクスは、ほとんどのワークフローでうまく機能します。"accuracy" などの組み込みメトリクス名を指定できます。メトリクスをさらにカスタマイズしたい場合は、AccuracyMetric オブジェクトなどの対応するメトリクス オブジェクトを使用して、追加のオプションを指定できます。組み込みメトリクス オブジェクトを使用するときは、平均化のタイプ、タスクが単一ラベルか複数ラベルかなどの追加オプションを指定できます。

メトリクスstring オプションカスタマイズ対象オブジェクト
精度 (最上位精度とも呼ばれる)"accuracy"AccuracyMetric
ROC 曲線下面積 (AUC)"auc"AUCMetric
F スコア (F1 スコアとも呼ばれる)"fscore"FScoreMetric
適合率"precision"PrecisionMetric
再現率"recall"RecallMetric
平方根平均二乗誤差"rmse"RMSEMetric

平均絶対誤差率 (MAPE) (R2024b 以降)

"mape"MAPEMetric

R2 (決定係数) (R2025a 以降)

"rsquared"RSquaredMetric

損失関数

学習時に追加の損失値を監視する場合は、損失関数を指定します。

メトリクスstring オプションメモ

分類タスク用のクロスエントロピー損失 (R2024b 以降)

"crossentropy"

損失関数を "index-crossentropy" に設定し、メトリクスとして "crossentropy" を指定することはサポートされていません。

分類タスクのインデックス クロスエントロピー損失 (R2024b 以降)

"indexcrossentropy"

損失関数を "crossentropy" に設定し、メトリクスとして "index-crossentropy" を指定することはサポートされていません。

バイナリ分類タスクおよびマルチラベル分類タスクのバイナリ クロスエントロピー損失 (R2024b 以降)

"binary-crossentropy" 

回帰タスクの平均絶対誤差 (R2024b 以降)

"mae" / "mean-absolute-error" / "l1loss" 

回帰タスクの平均二乗誤差 (R2024b 以降)

"mse" / "mean-squared-error" / "l2loss" 

回帰タスクの Huber 損失 (R2024b 以降)

"huber" 

カスタム メトリクス

組み込みメトリクスと損失関数がタスクに必要な機能を提供しない場合は、関数ハンドル、メトリクス オブジェクト、またはカスタム深層学習関数オブジェクトとして独自のカスタム メトリクスを指定できます。

メトリクスを関数ハンドル、カスタム メトリクス オブジェクト、またはカスタム関数オブジェクトとして指定し、trainnet 関数を使用してニューラル ネットワークに学習させる場合、ソフトウェアによってメトリクスに渡されるターゲットのレイアウトは、ターゲットのデータ型によって異なります。trainnet 関数で指定する損失関数と、指定するその他のメトリクスは、ソフトウェアに次のような影響を及ぼします。

  • ターゲットが数値配列の場合、ソフトウェアはターゲットをメトリクスに直接渡します。

  • 損失関数が "index-crossentropy" で、ターゲットが categorical 配列の場合、ソフトウェアはターゲットを数値クラス インデックスに自動的に変換し、メトリクスに渡します。

  • その他の損失関数では、ターゲットが categorical 配列の場合、ソフトウェアはターゲットを自動的に one-hot 符号化されたベクトルに変換し、メトリクスに渡します。

オブジェクト説明
カスタム関数

metric = metricFunction(Y,T) をもつ関数ハンドル。ここで、Y はネットワークの予測に対応し、T はターゲット応答に対応します。複数の出力をもつネットワークの場合、構文は metric = metricFunction(Y1,...,YN,T1,...,TM) でなければなりません。ここで、N は出力の数、M はターゲットの数です。

ミニバッチにデータが含まれる場合、ソフトウェアは各ミニバッチのメトリクスを計算し、それらの値の平均を返します。メトリクスによっては、この動作のために、データ セット全体を一度に使用してメトリクスを計算する場合とは異なるメトリクス値を取ることがあります。ほとんどの場合は、同様の値になります。データに対してバッチ平均されていないカスタム メトリクスを使用するには、カスタム メトリクス オブジェクトを作成しなければなりません。詳細については、Define Custom Deep Learning Metric Objectを参照してください。

詳細については、Define Custom Metric Functionを参照してください。

カスタム メトリクス オブジェクト

初期化、リセット、更新、集計、および評価を行うカスタム関数をもつメトリクス オブジェクト。カスタム メトリクスの作成方法を示す例については、Define Custom Metric Objectを参照してください。

カスタム メトリクスの作成に関する一般的な情報については、Define Custom Deep Learning Metric Objectを参照してください。

カスタム backward 関数をもつ深層学習関数オブジェクト (R2024a 以降)

カスタム backward 関数をもつ深層学習関数オブジェクト。カスタム深層学習関数オブジェクトを定義する方法を示す例については、Specify Custom Operation Backward Functionを参照してください。

categorical ターゲットの場合、ソフトウェアは categorical 値を one-hot 符号化されたベクトルに自動的に変換し、メトリクス関数に渡します。

詳細については、カスタム深層学習演算の定義を参照してください。

R2024a 以降

早期に停止して最適なネットワークを返すのに使用される目的指標の名前。string スカラーまたは文字ベクトルとして指定します。

このメトリクスの名前は、"loss" であるか、Metrics 引数で指定されたメトリクスの名前と同じでなければなりません。関数ハンドルで指定されたメトリクスはサポートされていません。ObjectiveMetricName の値をカスタム メトリクスの名前として指定するには、カスタム メトリクス オブジェクトの Maximize プロパティの値が空であってはなりません。詳細については、Define Custom Deep Learning Metric Objectを参照してください。

早期に停止するための目的指標の指定に関する詳細については、ValidationPatience を参照してください。目的指標を使用して最適なネットワークを返すことに関する詳細については、OutputNetwork を参照してください。

データ型: char | string

コマンド ウィンドウに学習の進行状況を表示するかどうかのフラグ。数値または logical の 1 (true) か 0 (false) として指定します。

詳細出力の内容は、ソルバーのタイプによって異なります。

確率的ソルバー (SGDM、Adam、および RMSProp) の場合、このテーブルには次の変数が含まれます。

変数説明
Iteration反復回数。
Epochエポック数。
TimeElapsed経過時間。時間、分、秒で示されます。
LearnRate学習率。
TrainingLoss学習損失。
ValidationLoss検証損失。検証データを指定しない場合、ソフトウェアはこの情報を表示しません。

バッチ ソルバー (L-BFGS および LM) の場合、この table には次の変数が含まれます。

変数説明
Iteration反復回数
TimeElapsed経過時間 (時間、分、秒)
TrainingLoss学習損失
ValidationLoss検証損失。検証データを指定しない場合、ソフトウェアはこの情報を表示しません。
GradientNorm勾配のノルム
StepNormステップのノルム

学習オプションで追加のメトリクスを指定した場合、詳細出力にもそれらのメトリクスが表示されます。たとえば、Metrics 学習オプションを "accuracy" に設定した場合、TrainingAccuracy 変数と ValidationAccuracy 変数もこの情報に含まれます。

学習が停止すると、詳細出力に停止の理由が表示されます。

コマンド ウィンドウに詳細出力を表示する間隔となる反復回数。正の整数として指定します。

学習中にニューラル ネットワークを検証する場合、ソフトウェアは、検証が行われるたびにコマンド ウィンドウにも出力します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

学習中に呼び出す関数。関数ハンドル、または関数ハンドルの cell 配列として指定します。ソフトウェアは、学習の開始前、各反復後、および学習の完了時に関数を 1 回呼び出します。

関数の構文は stopFlag = f(info) でなければなりません。ここで、info は学習の進行状況に関する情報が格納される構造体、stopFlag は学習を早期に停止させることを示すスカラーです。stopFlag が 1 (true) の場合、ソフトウェアは学習を停止させます。それ以外の場合、ソフトウェアは学習を続行します。

trainnet 関数は、構造体 info を出力関数に渡します。

確率的ソルバー (SGDM、Adam、および RMSProp) の場合、info には次のフィールドが含まれます。

フィールド説明
Epochエポック数
Iteration反復回数
TimeElapsed学習開始からの時間
LearnRate反復での学習率
TrainingLoss反復での学習損失
ValidationLoss検証損失 (指定されており、反復時に評価される場合)。
State反復での学習状態。"start"、"iteration"、または "done" として指定します。

バッチ ソルバー (L-BFGS および LM) の場合、info には次のフィールドが含まれます。

フィールド説明
Iteration反復回数
TimeElapsed経過時間 (時間、分、秒)
TrainingLoss学習損失
ValidationLoss検証損失。検証データを指定しない場合、ソフトウェアはこの情報を表示しません。
GradientNorm勾配のノルム
StepNormステップのノルム
State反復での学習状態。"start"、"iteration"、または "done" として指定します。

学習オプションで追加のメトリクスを指定した場合、学習情報にもそれらのメトリクスが表示されます。たとえば、Metrics 学習オプションを "accuracy" に設定した場合、フィールド TrainingAccuracy および ValidationAccuracy もこの情報に含まれます。

フィールドが計算されない、または出力関数の特定の呼び出しに関連していない場合、そのフィールドには空の配列が含まれます。

出力関数の使用方法を示す例については、深層学習における学習用のカスタム停止条件を参照してください。

データ型: function_handle | cell

データ レイアウト

すべて展開する

R2025a 以降

categorical 入力の符号化。次のいずれかの値として指定します。

  • "integer" — categorical 入力を整数値に変換します。この場合、ネットワークは categorical 入力ごとに 1 つの入力チャネルをもたなければなりません。

  • "one-hot" — categorical 入力を one-hot 符号化されたベクトルに変換します。この場合、ネットワークは categorical 入力ごとに numCategories 個のチャネルをもたなければなりません。ここで、numCategories は対応する categorical 入力のカテゴリの数です。

R2025a 以降

categorical ターゲットの符号化。次のいずれかの値として指定します。

  • "auto" — "index-crossentropy" 損失関数を使用して学習させる場合は、categorical ターゲットを整数値に変換します。それ以外の場合は、categorical ターゲットを one-hot 符号化されたベクトルに変換します。

  • "integer" — categorical ターゲットを整数値に変換し、整数に符号化された値を損失関数とメトリクス関数に渡します。

  • "one-hot" — categorical ターゲットを one-hot 符号化されたベクトルに変換し、one-hot 符号化された値を損失関数とメトリクス関数に渡します。

R2023b 以降

入力データの次元の説明。string 配列、文字ベクトル、または文字ベクトルの cell 配列として指定します。

InputDataFormats が "auto" の場合、ソフトウェアは、ネットワークの入力で必要とされる形式を使用します。そうでない場合、ソフトウェアは、該当するネットワーク入力に対して指定された形式を使用します。

深層学習のデータ形式は文字列で、各文字は対応するデータ次元のタイプを表します。各文字は以下のとおりです。

  • "S" — 空間

  • "C" — チャネル

  • "B" — バッチ

  • "T" — 時間

  • "U" — 指定なし

たとえば、シーケンスのバッチを表し、1 番目、2 番目、および 3 番目の次元がそれぞれチャネル、観測値、およびタイム ステップに対応する配列があるとします。データは "CBT" (チャネル、バッチ、時間) の形式で記述できます。

"S" または "U" のラベルが付いた次元については、複数回指定できます。"C"、"B"、"T" のラベルについては、それぞれ 1 回のみ使用できます。ソフトウェアは、2 番目の次元の後ろにある大きさが 1 の "U" 次元を無視します。

複数の入力をもつニューラル ネットワーク net の場合、入力データ形式の配列を指定します。ここで、InputDataFormats(i) は入力 net.InputNames(i) に対応します。

詳細については、深層学習のデータ形式を参照してください。

データ型: char | string | cell

R2023b 以降

ターゲット データの次元の説明。次のいずれかの値として指定します。

  • "auto" — ターゲット データと入力データの次元の数が同じ場合、関数 trainnet は InputDataFormats で指定された形式を使用します。ターゲット データの次元数が入力データと異なる場合、trainnet 関数は損失関数で必要とされる形式を使用します。

  • string 配列、文字ベクトル、または文字ベクトルの cell 配列 — 関数 trainnet はユーザーが指定したデータ形式を使用します。

深層学習のデータ形式は文字列で、各文字は対応するデータ次元のタイプを表します。各文字は以下のとおりです。

  • "S" — 空間

  • "C" — チャネル

  • "B" — バッチ

  • "T" — 時間

  • "U" — 指定なし

たとえば、シーケンスのバッチを表し、1 番目、2 番目、および 3 番目の次元がそれぞれチャネル、観測値、およびタイム ステップに対応する配列があるとします。データは "CBT" (チャネル、バッチ、時間) の形式で記述できます。

"S" または "U" のラベルが付いた次元については、複数回指定できます。"C"、"B"、"T" のラベルについては、それぞれ 1 回のみ使用できます。ソフトウェアは、2 番目の次元の後ろにある大きさが 1 の "U" 次元を無視します。

詳細については、深層学習のデータ形式を参照してください。

データ型: char | string | cell

確率的ソルバーのオプション

すべて展開する

学習に使用するエポックの最大数 (データを一巡する回数)。正の整数として指定します。

このオプションは、確率的ソルバーのみをサポートします (引数 solverName が "sgdm"、"adam"、または "rmsprop" の場合)。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

各ミニバッチのサンプル数。正の整数として指定します。

学習関数はデータをミニバッチに分割し、それらをループ処理します。関数は、各ミニバッチの損失関数の勾配を使用して、ニューラル ネットワークの学習可能なパラメーターを更新します。

指定されたミニバッチ サイズよりも学習サンプルの数が少ない場合、ソフトウェアはすべての学習データを含む単一のミニバッチを使用します。そうでない場合、ミニバッチのサイズで学習観測値の数を割り切ることができなければ、ソフトウェアは最後の部分的なミニバッチを破棄します。エポックごとに同じデータが破棄されるのを回避するには、Shuffle 学習オプションを "every-epoch" に設定します。

このオプションは、確率的ソルバーのみをサポートします (引数 solverName が "sgdm"、"adam"、または "rmsprop" の場合)。

ヒント

最高のパフォーマンスを得るために、imageDatastore などの ReadSize プロパティをもつデータストアを使用してネットワークに学習させる場合は、ReadSize プロパティと MiniBatchSize 学習オプションを同じ値に設定します。augmentedImageDatastore などの MiniBatchSize プロパティをもつデータストアを使用してネットワークに学習させる場合は、データストアの MiniBatchSize プロパティと MiniBatchSize 学習オプションを同じ値に設定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

データのシャッフルのオプション。次のいずれかの値として指定します。

  • "once" — 学習データと検証データを学習前に 1 回シャッフルします。

  • "never" — データをシャッフルしません。

  • "every-epoch" — 各学習エポックの前に学習データをシャッフルし、ニューラル ネットワークの各検証の前に検証データをシャッフルします。

指定されたミニバッチ サイズよりも学習サンプルの数が少ない場合、ソフトウェアはすべての学習データを含む単一のミニバッチを使用します。そうでない場合、ミニバッチのサイズで学習観測値の数を割り切ることができなければ、ソフトウェアは最後の部分的なミニバッチを破棄します。エポックごとに同じデータが破棄されるのを回避するには、Shuffle 学習オプションを "every-epoch" に設定します。

このオプションは、確率的ソルバーのみをサポートします (引数 solverName が "sgdm"、"adam"、または "rmsprop" の場合)。

学習に使用される初期学習率。正のスカラーとして指定します。

学習率が小さすぎる場合、学習が収束するまでに多くの反復が必要になる場合があります。学習率が大きすぎる場合、学習が準最適の結果に収束したり、発散したりすることがあります。

このオプションは、確率的ソルバーのみをサポートします (引数 solverName が "sgdm"、"adam"、または "rmsprop" の場合)。

solverName が "sgdm" の場合、既定値は 0.01 です。solverName が "rmsprop" または "adam" の場合、既定値は 0.001 です。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

学習率スケジュール。組み込みの学習率スケジュール名の文字ベクトルまたは string スカラー、名前の string 配列、組み込みまたはカスタムの学習率スケジュール オブジェクト、または関数ハンドルとして指定するか、名前、メトリクス オブジェクト、および関数ハンドルから成る cell 配列として指定します。

このオプションは、確率的ソルバーのみをサポートします (引数 solverName が "sgdm"、"adam"、または "rmsprop" の場合)。

string または cell 配列を指定することで、複数の学習率スケジュールを組み合わせることができます (R2024b 以降)。この場合、ソフトウェアは最初の要素から順番にスケジュールを適用します。スケジュールのうち最大 1 つを無限にすることができます ("cyclical" スケジュールや、NumSteps プロパティを Inf に設定したオブジェクトなど、無期限に継続するスケジュール)。無限スケジュールは、配列の最後の要素でなければなりません。

組み込みの学習率スケジュール

学習率スケジュールを、string スカラー、文字ベクトル、または次の 1 つ以上の名前から成る string または cell 配列として指定します。

スケジュールstringオブジェクトプロット
学習率スケジュールなし"none" — 学習率を一定に保持します。NA

Plot with x and y axes showing epoch and learning rate, respectively. The learning rate is constant for each epoch.

区分的学習率スケジュール"piecewise" — 10 エポックごとに学習率を 10 分の 1 に下げます。

piecewiseLearnRate (R2024b 以降) — 区分的スケジュールのドロップ係数と期間をカスタマイズします。

R2024b より前: LearnRateDropFactor 学習オプションと LearnRateDropPeriod 学習オプションをそれぞれ使用して、区分的ドロップ係数と周期をカスタマイズします。

Plot with x and y axes showing epoch and learning rate, respectively. Every 10 epochs, the learning rate drops by a factor of 10.

ウォームアップ学習率スケジュール (R2024b 以降)"warmup" — 5 回の反復で学習率を基本学習率まで徐々に上げます。warmupLearnRate — ウォームアップ スケジュールの初期学習率係数、最終学習率係数、およびステップ数をカスタマイズします。

Plot with x and y axes showing epoch and learning rate, respectively. For 5 iterations, the learning rate ramps up to the base learning rate and then remains constant.

多項式学習率スケジュール (R2024b 以降)"polynomial" — エポックごとに単位指数のべき乗則を使用して学習率を下げます。polynomialLearnRate — 多項式スケジュールの初期学習率係数、最終学習率係数、指数、およびステップ数をカスタマイズします。

Plot with x and y axes showing epoch and learning rate, respectively. The learning rate decreases linearly from the base learning rate towards zero.

指数学習率スケジュール (R2024b 以降)"exponential" — エポックごとに学習率を 10 分の 1 に減衰させます。exponentialLearnRate — 指数スケジュールのドロップ係数と周期をカスタマイズします。

Plot with x and y axes showing epoch and learning rate, respectively. Every epoch, the learning rate decays by a factor of 10.

余弦学習率スケジュール (R2024b 以降)"cosine" — エポックごとに、余弦定理を使用して学習率を下げます。cosineLearnRate — 余弦スケジュールの初期学習率係数、最終学習率係数、周期、および周期成長係数をカスタマイズします。

Plot with x and y axes showing epoch and learning rate, respectively. The learning rate decreases following a cosine curve from the base learning rate towards zero.

周期的学習率スケジュール (R2024b 以降)"cyclical" — 10 エポックの周期において、基本学習率から 5 エポックの間は学習率を増加させ、その後 5 エポックの間は学習率を減少させます。cyclicalLearnRate — 周期的なスケジュールの最大係数、周期、およびステップ比率をカスタマイズします。

Plot with x and y axes showing epoch and learning rate, respectively. For periods of 10 epochs, the learning rate increases from the base learning rate for 5 epochs and then decreases for 5 epochs.

カスタム学習率スケジュール (R2024b 以降)

柔軟性をさらに高めるには、deep.LearnRateSchedule から継承する関数ハンドルまたはカスタム クラスとしてカスタム学習率スケジュールを定義できます。

スケジュール説明
カスタム学習率スケジュール関数関数ハンドルは、構文 learningRate = f(baseLearningRate,epoch) で表されます。ここで、baseLearningRate は基本学習率、epoch はエポック数です。
カスタム学習率スケジュール オブジェクト

deep.LearnRateSchedule から継承するカスタム学習率スケジュール クラス。関数ハンドルを超える柔軟性が必要な場合は、このオプションを使用してください。

詳細については、Define Custom Learning Rate Scheduleを参照してください。

モーメンタム項付き確率的勾配降下法における前の反復から現在の反復へのパラメーター更新ステップの寄与。0 から 1 までのスカラーとして指定します。

値 0 は前のステップからの寄与がないことを意味し、値 1 は前のステップからの寄与が最大であることを意味します。ほとんどのタスクにおいて、既定値で良い結果が得られます。

この引数は、SGDM ソルバーのみをサポートします (引数 solverName が "sgdm" の場合)。

詳細については、モーメンタム項付き確率的勾配降下法を参照してください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Adam ソルバーの勾配の移動平均の減衰率。1 未満の非負のスカラーとして指定します。勾配の減衰率は、適応モーメント推定の節で β1 で表されます。

この引数は、Adam ソルバーのみをサポートします (引数 solverName が "adam" の場合)。

詳細については、適応モーメント推定を参照してください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Adam ソルバーおよび RMSProp ソルバーの勾配の二乗の移動平均の減衰率。1 未満の非負のスカラーとして指定します。勾配の二乗の減衰率は、[4]で β2 として表されます。

減衰率の一般的な値は 0.9、0.99、および 0.999 であり、平均化の長さとしては 10 回、100 回、および 1000 回のパラメーター更新にそれぞれ対応しています。

このオプションは、Adam ソルバーおよび RMSProp ソルバーのみをサポートします (引数 solverName が "adam" または "rmsprop" の場合)。

Adam ソルバーの既定値は 0.999 です。RMSProp ソルバーの既定値は 0.9 です。

詳細については、適応モーメント推定および平方根平均二乗伝播を参照してください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Adam および RMSProp ソルバーの分母のオフセット。正のスカラーとして指定します。

ソルバーは、ニューラル ネットワーク パラメーターの更新時に分母にオフセットを追加して、ゼロ除算を回避します。ほとんどのタスクにおいて、既定値で良い結果が得られます。

このオプションは、Adam ソルバーおよび RMSProp ソルバーのみをサポートします (引数 solverName が "adam" または "rmsprop" の場合)。

詳細については、適応モーメント推定および平方根平均二乗伝播を参照してください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

学習率を下げる係数。0 から 1 までのスカラーとして指定します。この引数は、LearnRateSchedule 引数が "piecewise" である場合にのみ有効です。

LearnRateDropFactor は、特定のエポック数が経過するたびに学習率に適用される乗法係数です。LearnRateDropPeriod 引数を使用してエポック数を指定します。

このオプションは、確率的ソルバーのみをサポートします (引数 solverName が "sgdm"、"adam"、または "rmsprop" の場合)。

ヒント

区分的学習率スケジュールをカスタマイズするには、piecewiseLearnRate オブジェクトを使用します (R2024b 以降)。ドロップ頻度をさらに制御できるため、LearnRateDropFactor および LearnRateDropPeriod の学習オプションよりも、piecewiseLearnRate オブジェクトの使用が推奨されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

学習率を下げるまでのエポック数。正の整数として指定します。この引数は、LearnRateSchedule 値が "piecewise" である場合にのみ有効です。

指定したエポック数が経過するたびに、グローバル学習率と低下係数が乗算されます。LearnRateDropFactor 引数を使用して低下係数を指定します。

このオプションは、確率的ソルバーのみをサポートします (引数 solverName が "sgdm"、"adam"、または "rmsprop" の場合)。

ヒント

区分的学習率スケジュールをカスタマイズするには、piecewiseLearnRate オブジェクトを使用します (R2024b 以降)。ドロップ頻度をさらに制御できるため、LearnRateDropFactor および LearnRateDropPeriod の学習オプションよりも、piecewiseLearnRate オブジェクトの使用が推奨されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

バッチ ソルバーのオプション

すべて展開する

R2023b 以降

学習に使用する最大反復回数。正の整数として指定します。

L-BFGS ソルバーは全バッチ ソルバーです。これは、学習セット全体を 1 回の反復で処理することを意味します。

このオプションはバッチ ソルバーのみをサポートします (solverName 引数が "lbfgs" または "lm" の場合)。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

R2023b 以降

相対勾配の許容値。正のスカラーとして指定します。

相対勾配の許容誤差。次のいずれかの値として指定します。

  • 正のスカラー — 相対勾配が指定した値以下になると、学習を停止します。

  • 0 (R2025a 以降) — 相対勾配に基づいて学習を停止しません。

このオプションはバッチ ソルバーのみをサポートします (solverName 引数が "lbfgs" または "lm" の場合)。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

R2023b 以降

ステップ サイズの許容誤差。次のいずれかの値として指定します。

  • 正のスカラー — アルゴリズムの実行するステップが指定された値以下になると、学習を停止します。

  • 0 (R2025a 以降) — ステップ サイズに基づいて学習を停止しません。

このオプションはバッチ ソルバーのみをサポートします (solverName 引数が "lbfgs" または "lm" の場合)。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

R2023b 以降

適切な学習率を検出する方法。次の値のいずれかとして指定します。

  • "weak-wolfe" — 弱 Wolfe 条件を満たす学習率を検索します。この方法は、逆ヘッセ行列の正定値近似を維持します。

  • "strong-wolfe" — 強 Wolfe 条件を満たす学習率を検索します。この方法は、逆ヘッセ行列の正定値近似を維持します。

  • "backtracking" — 十分な減少条件を満たす学習率を検索します。この方法は、逆ヘッセ行列の正定値近似を維持しません。

このオプションは、L-BFGS ソルバーのみをサポートします (引数 solverName が "lbfgs" の場合)。

R2023b 以降

保存する状態更新の数。正の整数として指定します。ほとんどのタスクには 3 ~ 20 の値が適しています。

L-BFGS アルゴリズムは、勾配計算の履歴を使用してヘッセ行列を再帰的に近似します。詳細については、メモリ制限 BFGSを参照してください。

このオプションは、L-BFGS ソルバーのみをサポートします (引数 solverName が "lbfgs" の場合)。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

R2023b 以降

逆ヘッセ行列の近似を特徴付ける初期値。正のスカラーとして指定します。

メモリを節約するため、L-BFGS アルゴリズムでは密なヘッセ行列 B の保存や反転は行われません。代わりに、アルゴリズムは近似 Bk−m−1≈λkI を使用します。ここで、m は履歴サイズであり、逆ヘッセ因子 λk はスカラーです。また、I は単位行列です。このアルゴリズムは、スカラーの逆ヘッセ因子のみを格納します。アルゴリズムは各ステップで逆ヘッセ因子を更新します。

逆ヘッセ因子の初期値は、λ0 の値です。

詳細については、メモリ制限 BFGSを参照してください。

このオプションは、L-BFGS ソルバーのみをサポートします (引数 solverName が "lbfgs" の場合)。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

R2023b 以降

学習率を決定するための直線探索の反復の最大数。正の整数として指定します。

このオプションは、L-BFGS ソルバーのみをサポートします (引数 solverName が "lbfgs" の場合)。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

R2024b 以降

初期ステップ サイズ。次のいずれかの値として指定します。

  • [] — 初期ヘッセ近似の決定に初期ステップ サイズを使用しません。

  • "auto" — 初期ステップ サイズを自動的に決定します。ソフトウェアは、初期ステップ サイズ ‖s0‖∞=12‖W0‖∞+0.1 を使用します。ここで、W0 はネットワークの初期の学習可能なパラメーターです。

  • 正の実数スカラー — 指定された値を初期ステップ サイズ ‖s0‖∞ として使用します。

InitialStepSize が "auto" または正の実数スカラーの場合、ソフトウェアは λ0=‖s0‖∞‖∇J(W0)‖∞ を使用して初期逆ヘッセ行列を近似します。ここで、λ0 は初期逆ヘッセ行列係数であり、∇J(W0) は初期の学習可能なパラメーターに関する損失の勾配を示します。詳細については、メモリ制限 BFGSを参照してください。

このオプションは、L-BFGS ソルバーのみをサポートします (引数 solverName が "lbfgs" の場合)。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

R2024b 以降

初期減衰係数。正のスカラーとして指定します。

このオプションは、LM ソルバーのみをサポートします (solverName 引数が "lm" の場合)。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

R2024b 以降

最大減衰係数。正のスカラーとして指定します。

このオプションは、LM ソルバーのみをサポートします (solverName 引数が "lm" の場合)。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

R2024b 以降

減衰係数を増加させる係数。1 より大きい正のスカラーとして指定します。

このオプションは、LM ソルバーのみをサポートします (solverName 引数が "lm" の場合)。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

R2024b 以降

減衰係数を減少させる係数。1 未満の正のスカラーとして指定します。

このオプションは、LM ソルバーのみをサポートします (solverName 引数が "lm" の場合)。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

検証

すべて展開する

学習中の検証に使用するデータ。

検証予測子と検証ターゲットを、学習関数がサポートする形式で指定します。学習関数が、学習予測子と学習ターゲットを単一のオブジェクトとして指定することをサポートしている場合 (たとえば、trainnet 関数は、データを単一のデータストアとして指定することをサポートしている)、検証データも同様の方法で指定できます。検証予測子と検証ターゲットが別々のインメモリ配列に格納されている場合、cell 配列 {predictors,targets} を指定できます。ここで、predictors と targets は、それぞれ学習関数がサポートするレイアウトの検証予測子と検証ターゲットです。詳細については、学習関数の入力引数を参照してください。

学習中に、ソフトウェアは検証データを使用して検証損失とメトリクス値を計算します。検証頻度を指定するには、ValidationFrequency 学習オプションを使用します。検証データを使用して、検証目的指標が改善されなくなったときに学習を自動的に停止することもできます。既定では、目的指標は損失に設定されます。自動検証停止をオンにするには、ValidationPatience 学習オプションを使用します。

ValidationData が [] の場合、学習中にニューラル ネットワークが検証されません。

ニューラル ネットワークに予測時と学習時で動作が異なる層 (ドロップアウト層など) がある場合、検証損失が学習損失より低くなる可能性があります。

検証データは、Shuffle 学習オプションに従ってシャッフルされます。Shuffle が "every-epoch" の場合、検証データはニューラル ネットワークの各検証の前にシャッフルされます。

反復回数で示されるニューラル ネットワークの検証の頻度。正の整数として指定します。

ValidationFrequency の値は、検証メトリクスの評価間の反復回数です。検証データを指定するには、ValidationData 学習オプションを使用します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

ニューラル ネットワークの学習の検証を停止するまでの待機回数。正の整数または Inf として指定します。

ValidationPatience は、ニューラル ネットワークの学習が停止するまでに、検証セットでの目的指標が前の最良値以下になることが許容される回数を指定します。ValidationPatience が Inf の場合、検証メトリクスの値によって学習が早期に停止することはありません。ソフトウェアは、メトリクスの Maximize プロパティの指定に従って、メトリクスを最大化または最小化しようと試みます。目的指標が "loss" の場合、ソフトウェアは損失値を最小化しようと試みます。

返されるニューラル ネットワークは、OutputNetwork 学習オプションによって異なります。検証メトリクス値が最良のニューラル ネットワークを返すようにするには、OutputNetwork 学習オプションを "best-validation" に設定します。

R2024a より前: ソフトウェアは、検証損失値を使用して検証の許容回数を計算します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

学習完了時に返すニューラル ネットワーク。以下のいずれかの値として指定します。

  • "auto" – ValidationData で検証データが指定されている場合、"best-validation" を使用します。それ以外の場合は "last-iteration" を使用します。

  • "best-validation" – 検証メトリクス値が最良となる学習反復に対応するニューラル ネットワークを返します。最適化するメトリクスは ObjectiveMetricName 引数で指定します。検証ステップが実行される前に学習が停止した場合 (たとえば、学習の進行状況プロットの [停止] ボタンをクリックした場合)、学習関数は検証ステップを実行せず、最後の学習反復に対応するニューラル ネットワークを返します。

  • "last-iteration" – 最後の学習反復に対応するニューラル ネットワークを返します。

正規化と正則化

すべて展開する

R2026a 以降

ターゲットを正規化するフラグ。次のいずれかの値として指定します。

  • 数値または logical の 1 (true) — ターゲットを正規化します。学習させるニューラル ネットワークには inverseNormalizationLayer オブジェクトがなければなりません。ソフトウェアは、逆正規化層の Normalization プロパティで指定された正規化方式を使用します。

  • 数値または logical の 0 (false) — ターゲットを正規化しません。

バッチ正規化層の統計量を評価するモード。次のいずれかとして指定します。

  • "population" — 母集団の統計量を使用します。学習終了後に学習データが再度渡され、その結果得られる平均と分散を使用して最終的な統計量が決定されます。

  • "moving" — 学習中、以下の更新ステップで与えられる実行時推定を使用して統計量を近似します。

    μ*=λμμ^+(1−λμ)μσ2*=λσ2σ2^​+​(1-λσ2)​σ2,

    ここで、μ* と σ2* はそれぞれ更新後の平均と分散、λμ と λσ2 はそれぞれ平均と分散の減衰値、μ^ と σ2^ はそれぞれ層入力の平均と分散、μ と σ2 はそれぞれ移動平均と分散の値の最新値を表します。学習終了後、最後に得られた移動平均と分散の値が使用されます。このオプションは、CPU および単一の GPU による学習のみをサポートします。

  • "auto" — "moving" オプションを使用します。

入力層の正規化統計量をリセットするフラグ。次のいずれかの値として指定します。

  • 数値または logical の 1 (true) — 入力層の正規化統計量をリセットし、学習時に再計算します。

  • 数値または logical の 0 (false) — 入力層のプロパティで指定された正規化統計量を学習時に使用します。層のプロパティが [] である場合、ソフトウェアは対応する統計量の既定値で統計量を初期化します。

R2026a 以降

逆正規化層の統計量をリセットするフラグ。次のいずれかの値として指定します。

  • 数値または logical の 1 (true) — 逆正規化層の統計量をリセットし、学習時に再計算します。

  • 数値または logical の 0 (false) — 逆正規化層の統計量が空である場合、それを学習時に計算します。

L2 正則化 (重み減衰) の係数。非負のスカラーとして指定します。詳細については、L2 正則化を参照してください。

このオプションは、LM ソルバーをサポートしません (solverName 引数が "lm" の場合)。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

勾配クリップ

すべて展開する

勾配しきい値。Inf または正のスカラーとして指定します。勾配が GradientThreshold の値を超えた場合、勾配は GradientThresholdMethod 引数に応じてクリップされます。

詳細については、勾配クリップを参照してください。

このオプションは、LM ソルバーをサポートしません (solverName 引数が "lm" の場合)。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

勾配しきい値を超えた勾配の値をクリップするために使用する勾配しきい値法。次のいずれかに指定します。

  • "l2norm" — 学習可能なパラメーターの勾配の L2 ノルムが GradientThreshold より大きい場合は、L2 ノルムが GradientThreshold に等しくなるように勾配をスケーリングします。

  • "global-l2norm" — グローバル L2 ノルム L が GradientThreshold より大きい場合は、すべての勾配を GradientThreshold/L 倍にスケーリングします。グローバル L2 ノルムでは、すべての学習可能なパラメーターが考慮されます。

  • "absolute-value" — 学習可能なパラメーターの勾配に含まれる偏微分のうち、絶対値が GradientThreshold より大きいものについては、偏微分の符号を維持したまま、大きさが GradientThreshold に等しくなるように偏微分をスケーリングします。

詳細については、勾配クリップを参照してください。

このオプションは、LM ソルバーをサポートしません (solverName 引数が "lm" の場合)。

シーケンス

すべて展開する

入力シーケンスのパディングまたは切り捨てを行うオプション。次のいずれかの値として指定します。

  • "longest" — 各ミニバッチで、最長のシーケンスと同じ長さになるようにシーケンスのパディングを行います。このオプションを使用するとデータは破棄されませんが、パディングによってニューラル ネットワークにノイズが生じることがあります。

  • "shortest" — 各ミニバッチで、最短のシーケンスと同じ長さになるようにシーケンスの切り捨てを行います。このオプションを使用するとパディングは追加されませんが、データが破棄されます。

シーケンスのパディングと切り捨ての効果の詳細については、シーケンスのパディングと切り捨てを参照してください。

パディングまたは切り捨ての方向。次のいずれかのオプションとして指定します。

  • "right" — シーケンスの右側に対してパディングまたは切り捨てを行います。シーケンスは同じタイム ステップで始まり、ソフトウェアによって各シーケンスの末尾に対して切り捨てまたはパディングの追加が行われます。

  • "left" — シーケンスの左側に対してパディングまたは切り捨てを行います。各シーケンスが同じタイム ステップで終わるように、ソフトウェアによって各シーケンスの先頭に対して切り捨てまたはパディングの追加が行われます。

再帰層は 1 タイム ステップずつシーケンス データを処理するため、再帰層が最後のタイム ステップのみを出力する場合、最後のタイム ステップでパディングを行うと層の出力に悪影響を与える可能性があります。左側のパディングを使用すると、最後のタイム ステップにパディングが含まれないようになるため、この問題を回避できます。

sequence-to-sequence ニューラル ネットワークの場合 (再帰層がシーケンス全体を出力する場合)、最初のタイム ステップでパディングを行うと、それ以前のタイム ステップの予測に悪影響を与える可能性があります。右側のパディングを使用すると、最初のタイム ステップにパディングが含まれないようになるため、この問題を回避できます。

シーケンスのパディングと切り捨ての効果の詳細については、シーケンスのパディングと切り捨てを参照してください。

入力シーケンスをパディングするための値。スカラーとして指定します。

ニューラル ネットワーク全体にエラーが伝播される可能性があるため、NaN でシーケンスをパディングしないでください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

ハードウェアと高速化

すべて展開する

ニューラル ネットワークの学習用のハードウェア リソース。次のいずれかの値として指定します。

  • "auto" – 利用可能な場合、ローカル GPU を使用します。そうでない場合、ローカル CPU を使用します。

  • "cpu" – ローカル CPU を使用します。

  • "gpu" – ローカル GPU を使用します。

  • "multi-gpu" — 既定のクラスター プロファイルに基づいてローカルの並列プールを使用して、1 つのマシンで複数の GPU を使用します。現在の並列プールがない場合、使用可能な GPU の数と等しいプール サイズの並列プールが起動されます。

  • "parallel-auto" – ローカルまたはリモートの並列プールを使用します。現在の並列プールがない場合、既定のクラスター プロファイルを使用して 1 つのプールが起動されます。プールから GPU にアクセスできる場合、固有の GPU をもつワーカーのみが学習計算を実行し、余ったワーカーはアイドル状態になります。プールに GPU がない場合、代わりに使用可能なすべての CPU ワーカーで学習が実行されます (R2024a 以降)。

    R2024a より前: 代わりに "parallel" を使用してください。

  • "parallel-cpu" – ローカルまたはリモートの並列プールにある CPU リソースを使用し、GPU は無視します。現在の並列プールがない場合、既定のクラスター プロファイルを使用して 1 つのプールが起動されます (R2023b 以降)。

  • "parallel-gpu" – ローカルまたはリモートの並列プールにある GPU を使用します。余ったワーカーはアイドル状態になります。現在の並列プールがない場合、既定のクラスター プロファイルを使用して 1 つのプールが起動されます (R2023b 以降)。

"gpu"、"multi-gpu"、"parallel-auto"、"parallel-cpu"、および "parallel-gpu" のオプションを使用するには、Parallel Computing Toolbox™ が必要です。深層学習に GPU を使用するには、サポートされている GPU デバイスもなければなりません。サポートされているデバイスの詳細については、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。これらのいずれかのオプションの選択時に Parallel Computing Toolbox または適切な GPU を利用できない場合、エラーが返されます。

さまざまな実行環境をどのような場合に使用するかの詳細は、並列処理、GPU、およびクラウドによる深層学習のスケール アップを参照してください。

並列学習の実行時に性能の改善を確認するには、MiniBatchSize および InitialLearnRate 学習オプションを GPU の数でスケール アップしてみてください。

"multi-gpu"、"parallel-auto"、"parallel-cpu"、および "parallel-gpu" オプションは、確率的ソルバーのみをサポートします (引数 solverName が "sgdm"、"adam"、または "rmsprop" の場合)。

R2024a 以降

学習時にデータストアからデータを取得して前処理を行うための環境。次のいずれかの値として指定します。

  • "serial" – データの取得と前処理は逐次実行されます。

  • "background" – バックグラウンド プールを使用してデータの取得と前処理が行われます。

  • "parallel" – 並列ワーカーを使用してデータの取得と前処理が行われます。ローカル プールが開かれていなければ、ソフトウェアは既定のプロファイルを使用して並列プールを開きます。ローカルではない並列プールはサポートされません。このオプションを使用するには、Parallel Computing Toolbox が必要です。並列で学習させる場合 (ExecutionEnvironment オプションが "parallel-auto"、"parallel-cpu"、"parallel-gpu"、または "multi-gpu" の場合)、このオプションはサポートされません。

Shuffle オプションが "never" の場合、"background" オプションおよび "parallel" オプションはサポートされません。

"background" オプションおよび "parallel" オプションを使用した場合、deep.gpu.deterministicAlgorithms 関数を使用しても学習は非確定的になります。

ミニバッチに大幅な前処理が必要な場合は、"background" オプションを使用します。前処理がスレッドでサポートされていない場合、またはワーカー数を制御する必要がある場合は、"parallel" オプションを使用します。前処理環境の詳細については、Preprocess Data in the Background or in Parallelを参照してください。

このオプションは、確率的ソルバーのみをサポートします (引数 solverName が "sgdm"、"adam"、または "rmsprop" の場合)。

R2024a より前: データを並列で前処理するには、DispatchInBackground 学習オプションを logical の 1 (true) に設定します。

R2026b 以降

GPU 学習の浮動小数点精度。以下のいずれかの値として指定します。

  • "prioritize-single" — 既定の MATLAB® 浮動小数点データ型伝播ルールを使用して学習計算が行われます。学習可能なパラメーターと状態パラメーター、および学習データがすべて double 型でない限り、単精度浮動小数点演算を使用して学習計算が行われます。MATLAB の浮動小数点データ型の詳細については、浮動小数点数を参照してください。

  • "automatic-mixed" — 可能な限り最高のパフォーマンスを得るために半精度浮動小数点演算を使用して学習計算が行われます。ソフトウェアは、パフォーマンスを向上させ、数値安定性を維持するために、単精度と半精度を各演算において自動的に選択します。このオプションは、Compute Capability が 8.0 以上の GPU (Ampere アーキテクチャ以降) での学習のみをサポートします。

自動混合精度を使用すると、GPU メモリの使用量も削減できるため、ミニバッチ サイズを大きくすることができます。ミニバッチ サイズを大きくすると、通常は学習時間が短縮されます。しかし、ミニバッチのサイズが大きすぎると、学習済みネットワークの最終的な精度に悪影響を与える可能性があります。

大規模なネットワークであるほど、自動混合精度を使用することによるパフォーマンス上のメリットは大きくなります。ネットワークに複数のカスタム層が含まれている場合は、"prioritize-single" を使用してください。自動混合精度を使用すると、学習が遅くなる可能性があります。

このオプションは、確率的ソルバーのみをサポートします (引数 solverName が "sgdm"、"adam"、または "rmsprop" の場合)。

メモ

自動混合精度を使用する場合、trainnet 関数は単精度の学習可能なパラメーターと状態パラメーターをもつネットワークを返すため、このオプションは、予測、Simulink® へのエクスポート、またはコード生成には影響しません。

R2024a 以降

パフォーマンスの最適化。次のいずれかの値として指定します。

  • "auto" – 入力ネットワークとハードウェア リソースに適した最適化の回数を自動的に適用します。

  • "none" – すべての最適化を無効にします。

"auto" 高速化オプションを使用すると、パフォーマンス上のメリットが得られますが、初期実行時間が長くなります。互換性のあるパラメーターを使用した後続の呼び出しは、より高速になります。サイズと形状が同じである異なる入力データを使用して関数を複数回呼び出す場合は、パフォーマンスの最適化を使用してください。

チェックポイント

すべて展開する

チェックポイント ニューラル ネットワークの保存用のパス。string スカラーまたは文字ベクトルとして指定します。

  • パスを指定しない (既定の "" を使用する) 場合、チェックポイント ニューラル ネットワークは保存されません。

  • パスを指定すると、ソフトウェアによってこのパスにチェックポイント ニューラル ネットワークが保存され、各ニューラル ネットワークに一意の名前が割り当てられます。その後、いずれかのチェックポイント ニューラル ネットワークを読み込み、そのニューラル ネットワークから学習を再開できます。

    フォルダーが存在していない場合、チェックポイント ニューラル ネットワークを保存するパスを指定する前に、まずフォルダーを作成しなければなりません。指定したパスが存在していない場合、ソフトウェアはエラーをスローします。

データ型: char | string

チェックポイント ニューラル ネットワークを保存する頻度。正の整数として指定します。

solverName が "lbfgs" であるか CheckpointFrequencyUnit が "iteration" である場合、CheckpointFrequency 回の反復ごとにチェックポイント ニューラル ネットワークが保存されます。それ以外の場合、ソフトウェアは CheckpointFrequency エポックごとにチェックポイント ニューラル ネットワークを保存します。

solverName が "sgdm"、"adam"、または "rmsprop" の場合、既定値は 1 です。solverName が "lbfgs" または "lm" の場合、既定値は 30 です。

このオプションは、CheckpointPath が空でない場合にのみ有効です。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

チェックポイントの頻度の単位。"epoch" または "iteration" として指定します。

CheckpointFrequencyUnit が "epoch" の場合、ソフトウェアは CheckpointFrequency エポックごとにチェックポイント ニューラル ネットワークを保存します。

CheckpointFrequencyUnit が "iteration" の場合、ソフトウェアは CheckpointFrequency 回の反復ごとにチェックポイント ニューラル ネットワークを保存します。

このオプションは、CheckpointPath が空でない場合にのみ有効です。

このオプションは、確率的ソルバーのみをサポートします (引数 solverName が "sgdm"、"adam"、または "rmsprop" の場合)。

出力引数

すべて折りたたむ

学習オプション。TrainingOptionsSGDM オブジェクト、TrainingOptionsRMSProp オブジェクト、TrainingOptionsADAM オブジェクト、TrainingOptionsLBFGS オブジェクト、TrainingOptionsLM オブジェクトとして返されます。

ニューラル ネットワークに学習させるには、学習オプションを関数 trainnet への入力引数として使用します。

ヒント

  • ほとんどの深層学習タスクでは、事前学習済みのニューラル ネットワークを使用して独自のデータに適応させることができます。転移学習を使用して、畳み込みニューラル ネットワークの再学習を行い、新しい一連のイメージを分類する方法を示す例については、新しいイメージを分類するためのニューラル ネットワークの再学習を参照してください。または、関数 trainnet と関数 trainingOptions を使用してニューラル ネットワークを作成し、これにゼロから学習させることができます。

    タスクに必要な学習オプションが関数 trainingOptions に用意されていない場合、自動微分を使用してカスタム学習ループを作成できます。詳細については、カスタム学習ループを使用したネットワークの学習を参照してください。

    タスクに必要な損失関数が関数 trainnet に用意されていない場合、カスタム損失関数を関数ハンドルとして trainnet に指定できます。損失関数が予測とターゲットよりも多くの入力を必要とする場合 (たとえば、損失関数がニューラル ネットワークまたは追加の入力にアクセスする必要がある場合)、カスタム学習ループを使用してモデルに学習させます。詳細については、カスタム学習ループを使用したネットワークの学習を参照してください。

    タスクに必要な層が Deep Learning Toolbox™ に用意されていない場合、カスタム層を作成できます。詳細については、カスタム深層学習層の定義を参照してください。層のネットワークとして指定できないモデルの場合は、モデルを関数として定義できます。詳細については、モデル関数を使用したネットワークの学習を参照してください。

    どのタスクでどの学習手法を使用するかについての詳細は、MATLAB による深層学習モデルの学習を参照してください。

アルゴリズム

すべて折りたたむ

参照

[1] Bishop, C. M. Pattern Recognition and Machine Learning. Springer, New York, NY, 2006.

[2] Murphy, K. P. Machine Learning: A Probabilistic Perspective. The MIT Press, Cambridge, Massachusetts, 2012.

[3] Pascanu, R., T. Mikolov, and Y. Bengio. "On the difficulty of training recurrent neural networks". Proceedings of the 30th International Conference on Machine Learning. Vol. 28(3), 2013, pp. 1310–1318.

[4] Kingma, Diederik, and Jimmy Ba. "Adam: A method for stochastic optimization." arXiv preprint arXiv:1412.6980 (2014).

[5] Liu, Dong C., and Jorge Nocedal. "On the limited memory BFGS method for large scale optimization." Mathematical programming 45, no. 1 (August 1989): 503-528. https://doi.org/10.1007/BF01589116.

[6] Marquardt, Donald W. “An Algorithm for Least-Squares Estimation of Nonlinear Parameters.” Journal of the Society for Industrial and Applied Mathematics 11, no. 2 (June 1963): 431–41. https://doi.org/10.1137/0111030.

バージョン履歴

R2016a で導入

すべて展開する