trainnet
構文
説明
は、netTrained = trainnet(images,net,lossFcn,options)images で指定したイメージとターゲット、および options で定義した学習オプションを使用し、net で指定したニューラル ネットワークにイメージ タスクを学習させます。
は、netTrained = trainnet(sequences,net,lossFcn,options)sequences で指定したシーケンスとターゲットを使用して、シーケンス タスクまたは時系列タスクのためのニューラル ネットワーク (LSTM や GRU ニューラル ネットワークなど) に学習させます。
は、netTrained = trainnet(features,net,lossFcn,options)features で指定した特徴データとターゲットを使用して、特徴タスクのためのニューラル ネットワーク (多層パーセプトロン (MLP) ニューラル ネットワークなど) に学習させます。
は、他のデータ レイアウトまたは異なるタイプのデータの組み合わせを使用してニューラル ネットワークに学習させます。netTrained = trainnet(data,net,lossFcn,options)
[ は、前述の構文のいずれかを使用して学習情報も返します。netTrained,info] = trainnet(___)
例
イメージのデータ セットがある場合は、イメージ入力層を使用して深層ニューラル ネットワークに学習させることができます。
数字のサンプル データを解凍し、イメージ データストアを作成します。関数 imageDatastore は、フォルダー名に基づいてイメージに自動的にラベルを付けます。
unzip("DigitsData.zip") imds = imageDatastore("DigitsData", ... IncludeSubfolders=true, ... LabelSource="foldernames");
データを学習データ セットとテスト データ セットに分割し、学習セットの各カテゴリに 750 個のイメージが含まれ、テスト セットに各ラベルの残りのイメージが含まれるようにします。splitEachLabel は、イメージ データストアを学習用とテスト用の 2 つの新しいデータストアに分割します。
numTrainFiles = 750;
[imdsTrain,imdsTest] = splitEachLabel(imds,numTrainFiles,"randomized");畳み込みニューラル ネットワーク アーキテクチャを定義します。ネットワークの入力層にイメージのサイズを指定し、最終全結合層にクラスの数を指定します。イメージはそれぞれ 28 x 28 x 1 ピクセルです。
inputSize = [28 28 1];
classNames = categories(imds.Labels);
numClasses = numel(classNames);
layers = [
imageInputLayer(inputSize)
convolution2dLayer(5,20)
batchNormalizationLayer
reluLayer
fullyConnectedLayer(numClasses)
softmaxLayer];学習オプションを指定します。
SGDM ソルバーを使用して学習させます。
学習を 4 エポック行います。
学習の進行状況をプロットで監視し、精度メトリクスを監視します。
詳細出力を無効にします。
options = trainingOptions("sgdm", ... MaxEpochs=4, ... Verbose=false, ... Plots="training-progress", ... Metrics="accuracy");
ニューラル ネットワークを学習させます。分類には、クロスエントロピー損失を使用します。
net = trainnet(imdsTrain,layers,"crossentropy",options);
ラベル付きテスト セットを使用してネットワークをテストします。単一ラベルの分類では、精度を評価します。精度は、ネットワークが正しく予測するラベルの割合です。
accuracy = testnet(net,imdsTest,"accuracy")accuracy = 98.2400
学習済みのネットワークを使用して分類スコアを予測し、scores2label 関数を使用してラベルを予測に変換します。
scoresTest = minibatchpredict(net,imdsTest); YTest = scores2label(scoresTest,classNames);
混同チャートで予測を可視化します。
confusionchart(imdsTest.Labels,YTest)

数値特徴量のデータ セット (空間次元や時間次元のない表形式データなど) がある場合、特徴入力層を使用して深層ニューラル ネットワークに学習させることができます。
CSV ファイル "transmissionCasingData.csv" からトランスミッション ケーシング データを読み取ります。
filename = "transmissionCasingData.csv"; tbl = readtable(filename,TextType="String");
関数 convertvars を使用して、予測のラベルを categorical に変換します。
labelName = "GearToothCondition"; tbl = convertvars(tbl,labelName,"categorical");
カテゴリカル特徴量を使用してネットワークに学習させるには、最初にカテゴリカル特徴量を数値に変換しなければなりません。まず、関数 convertvars を使用して、すべてのカテゴリカル入力変数の名前を格納した string 配列を指定することにより、カテゴリカル予測子を categorical に変換します。このデータ セットには、"SensorCondition" と "ShaftCondition" という名前の 2 つのカテゴリカル特徴量があります。
categoricalPredictorNames = ["SensorCondition" "ShaftCondition"]; tbl = convertvars(tbl,categoricalPredictorNames,"categorical");
カテゴリカル入力変数をループ処理します。各変数について、関数 onehotencode を使用して categorical 値を one-hot 符号化ベクトルに変換します。
for i = 1:numel(categoricalPredictorNames) name = categoricalPredictorNames(i); tbl.(name) = onehotencode(tbl.(name),2); end
table の最初の数行を表示します。カテゴリカル予測子が複数の列に分割されていることに注意してください。
head(tbl)
SigMean SigMedian SigRMS SigVar SigPeak SigPeak2Peak SigSkewness SigKurtosis SigCrestFactor SigMAD SigRangeCumSum SigCorrDimension SigApproxEntropy SigLyapExponent PeakFreq HighFreqPower EnvPower PeakSpecKurtosis SensorCondition ShaftCondition GearToothCondition
________ _________ ______ _______ _______ ____________ ___________ ___________ ______________ _______ ______________ ________________ ________________ _______________ ________ _____________ ________ ________________ _______________ ______________ __________________
-0.94876 -0.9722 1.3726 0.98387 0.81571 3.6314 -0.041525 2.2666 2.0514 0.8081 28562 1.1429 0.031581 79.931 0 6.75e-06 3.23e-07 162.13 0 1 1 0 No Tooth Fault
-0.97537 -0.98958 1.3937 0.99105 0.81571 3.6314 -0.023777 2.2598 2.0203 0.81017 29418 1.1362 0.037835 70.325 0 5.08e-08 9.16e-08 226.12 0 1 1 0 No Tooth Fault
1.0502 1.0267 1.4449 0.98491 2.8157 3.6314 -0.04162 2.2658 1.9487 0.80853 31710 1.1479 0.031565 125.19 0 6.74e-06 2.85e-07 162.13 0 1 0 1 No Tooth Fault
1.0227 1.0045 1.4288 0.99553 2.8157 3.6314 -0.016356 2.2483 1.9707 0.81324 30984 1.1472 0.032088 112.5 0 4.99e-06 2.4e-07 162.13 0 1 0 1 No Tooth Fault
1.0123 1.0024 1.4202 0.99233 2.8157 3.6314 -0.014701 2.2542 1.9826 0.81156 30661 1.1469 0.03287 108.86 0 3.62e-06 2.28e-07 230.39 0 1 0 1 No Tooth Fault
1.0275 1.0102 1.4338 1.0001 2.8157 3.6314 -0.02659 2.2439 1.9638 0.81589 31102 1.0985 0.033427 64.576 0 2.55e-06 1.65e-07 230.39 0 1 0 1 No Tooth Fault
1.0464 1.0275 1.4477 1.0011 2.8157 3.6314 -0.042849 2.2455 1.9449 0.81595 31665 1.1417 0.034159 98.838 0 1.73e-06 1.55e-07 230.39 0 1 0 1 No Tooth Fault
1.0459 1.0257 1.4402 0.98047 2.8157 3.6314 -0.035405 2.2757 1.955 0.80583 31554 1.1345 0.0353 44.223 0 1.11e-06 1.39e-07 230.39 0 1 0 1 No Tooth Fault
データ セットのクラス名を表示します。
classNames = categories(tbl{:,labelName})classNames = 2×1 cell
{'No Tooth Fault'}
{'Tooth Fault' }
テスト用のデータを確保します。データの 85% から成る学習セットとデータの残りの 15% から成るテスト セットにデータを分割します。データを分割するには、この例にサポート ファイルとして添付されている関数 trainingPartitions を使用します。このファイルにアクセスするには、例をライブ スクリプトとして開きます。
numObservations = size(tbl,1); [idxTrain,idxTest] = trainingPartitions(numObservations,[0.85 0.15]); tblTrain = tbl(idxTrain,:); tblTest = tbl(idxTest,:);
関数 trainnet がサポートする形式にデータを変換します。予測子とターゲットをそれぞれ数値配列と categorical 配列に変換します。特徴量を入力する場合、ネットワークは、観測値に対応する行と特徴量に対応する列をもつデータを必要とします。データのレイアウトがこれとは異なる場合、このレイアウトになるようにデータを前処理するか、データ形式を使用してレイアウト情報を指定します。詳細については、深層学習のデータ形式を参照してください。
predictorNames = ["SigMean" "SigMedian" "SigRMS" "SigVar" "SigPeak" "SigPeak2Peak" ... "SigSkewness" "SigKurtosis" "SigCrestFactor" "SigMAD" "SigRangeCumSum" ... "SigCorrDimension" "SigApproxEntropy" "SigLyapExponent" "PeakFreq" ... "HighFreqPower" "EnvPower" "PeakSpecKurtosis" "SensorCondition" "ShaftCondition"]; XTrain = table2array(tblTrain(:,predictorNames)); TTrain = tblTrain.(labelName); XTest = table2array(tblTest(:,predictorNames)); TTest = tblTest.(labelName);
特徴入力層を使用してネットワークを定義し、特徴の数を指定します。また、z スコア正規化を使用してデータを正規化するように入力層を構成します。
numFeatures = size(XTrain,2);
numClasses = numel(classNames);
layers = [
featureInputLayer(numFeatures,Normalization="zscore")
fullyConnectedLayer(16)
layerNormalizationLayer
reluLayer
fullyConnectedLayer(numClasses)
softmaxLayer];学習オプションを指定します。
L-BFGS ソルバーを使用して学習させます。このソルバーは、ネットワークが小さくデータがメモリに収まるタスクに適しています。
CPU を使用して学習させます。ネットワークとデータが小さいため、CPU の方がより適しています。
学習の進行状況をプロットに表示します。
詳細出力を非表示にします。
options = trainingOptions("lbfgs", ... ExecutionEnvironment="cpu", ... Plots="training-progress", ... Verbose=false);
関数 trainnet を使用してネットワークに学習させます。分類には、クロスエントロピー損失を使用します。
net = trainnet(XTrain,TTrain,layers,"crossentropy",options);
ラベル付きテスト セットを使用してネットワークをテストします。単一ラベルの分類では、精度を評価します。精度は、ネットワークが正しく予測するラベルの割合です。
accuracy = testnet(net,XTest,TTest,"accuracy")accuracy = 100
学習済みネットワークを使用してテスト データのラベルを予測します。学習済みネットワークを使用して分類スコアを予測し、scores2label 関数を使用して予測結果をラベルに変換します。
scoresTest = minibatchpredict(net,XTest); YTest = scores2label(scoresTest,classNames);
混同チャートで予測を可視化します。
confusionchart(TTest,YTest)

入力引数
データ
イメージ データ。数値配列、dlarray オブジェクト、データストア、minibatchqueue オブジェクト、または categorical 配列として指定します。
ヒント
ビデオ データのようなイメージのシーケンスの場合、入力引数 sequences を使用します。
メモリに収まり、データ拡張などの追加処理を必要としないデータがある場合、入力データを数値配列または categorical 配列として指定するのが通常最も簡単なオプションです。ディスクに保存されているイメージ ファイルを使用して学習させる場合、またはデータ拡張などの追加処理を適用する場合は、データストアを使用するのが通常最も簡単なオプションです。複数の出力をもつニューラル ネットワークの場合は、TransformedDatastore オブジェクト、CombinedDatastore オブジェクト、または minibatchqueue オブジェクトを使用しなければなりません。
ヒント
ニューラル ネットワークには、特定のレイアウトをもつ入力データが必要です。たとえば、イメージ分類ネットワークは通常、h×w×c の数値配列のイメージ表現を必要とします。ここで、h、w、c はそれぞれイメージの高さ、幅、チャネル数です。ニューラル ネットワークの入力層では、通常、必要とされるデータ レイアウトが指定されています。
ほとんどのデータストアと関数は、ネットワークで必要とされるレイアウトでデータを出力します。データのレイアウトがネットワークで必要とされるレイアウトと異なる場合、データのレイアウトが異なることを示すために、InputDataFormats 学習オプションを使用するか、データを minibatchqueue オブジェクトとして指定して MiniBatchFormat プロパティを指定するか、形式を整えた dlarray オブジェクトとして入力データを指定します。通常、データ形式を指定することは、入力データを前処理するよりも簡単です。InputDataFormats 学習オプションと MiniBatchFormat minibatchqueue プロパティの両方を指定する場合、それらは一致していなければなりません。
入力層をもたないニューラル ネットワークの場合、InputDataFormats 学習オプションを使用するか、データを minibatchqueue オブジェクトとして指定して InputDataFormats プロパティを使用するか、形式を整えた dlarray オブジェクトを使用しなければなりません。
損失関数には、特定のレイアウトをもつデータが必要です。たとえば、sequence-to-vector 回帰ネットワークの場合、損失関数は通常、1 行 R 列のベクトルとして表されたターゲット ベクトルを必要とします。ここで、R は応答の数です。
ほとんどのデータストアと関数は、損失関数で必要とされるレイアウトでデータを出力します。ターゲット データが損失関数で必要とされるレイアウトと異なる場合、ターゲットのレイアウトが異なることを示すために、TargetDataFormats 学習オプションを使用するか、データを minibatchqueue オブジェクトとして指定して TargetDataFormats プロパティを指定するか、形式を整えた dlarray オブジェクトとしてターゲット データを指定します。通常、データ形式を指定することは、ターゲット データを前処理するよりも簡単です。TargetDataFormats 学習オプションと TargetDataFormats minibatchqueue プロパティの両方を指定する場合、それらは一致していなければなりません。
詳細については、深層学習のデータ形式を参照してください。
数値配列または dlarray オブジェクト
メモリに収まり、なおかつ拡張などの追加の処理を必要としないデータの場合、イメージのデータ セットを数値配列または dlarray オブジェクトとして指定できます。イメージを数値配列または dlarray オブジェクトとして指定した場合、引数 targets も指定しなければなりません。
数値配列と形式を整えていない dlarray オブジェクトのレイアウトは、イメージ データの種類によって異なり、InputDataFormats 学習オプションと一致していなければなりません。
ほとんどのネットワークでは、次のレイアウトのイメージ データが必要です。
| データ | レイアウト |
|---|---|
| 2 次元イメージ | h×w×c×N の配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数です。N はイメージの数です。 このレイアウトのデータは、 |
| 3 次元イメージ | h×w×d×c×N の配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数です。N はイメージの数です。 このレイアウトのデータは、 |
異なるレイアウトのデータの場合は、InputDataFormats 学習オプションを使用してデータのレイアウトが異なることを示すか、形式を整えた dlarray オブジェクトを代わりに使用します。詳細については、深層学習のデータ形式を参照してください。
categorical 配列 (R2025a 以降)
メモリに収まり、追加の処理を必要としない categorical 値のイメージ (ラベル付きピクセル マップなど) の場合は、イメージを categorical 配列として指定できます。
イメージを categorical 配列として指定した場合、targets 引数も指定しなければなりません。
ソフトウェアは categorical 入力を自動的に数値に変換し、ニューラル ネットワークに渡します。ソフトウェアが categorical 入力を数値に変換する方法を指定するには、学習オプション関数の CategoricalInputEncoding 引数を使用します。categorical 配列のレイアウトはイメージ データの種類によって異なり、学習オプション関数の InputDataFormats 引数と一致していなければなりません。
次の表のレイアウトにおいて、ほとんどのネットワークでは、trainnet 関数に categorical イメージ データを渡す必要があります。
| データ | レイアウト |
|---|---|
| 2 次元 categorical イメージ | h×w×1×N の配列。ここで、h と w は、それぞれイメージの高さと幅で、N はイメージの数です。 ソフトウェアがこのデータを数値配列に変換すると、このレイアウトのデータ形式は |
| 3 次元 categorical イメージ | h×w×d×1×N の配列。ここで、h、w、d は、それぞれイメージの高さ、幅、深さで、N はイメージの数です。 このレイアウトのデータは、 |
異なるレイアウトのデータの場合は、InputDataFormats 学習オプションを使用してデータのレイアウトが異なることを示すか、形式を整えた dlarray オブジェクトを代わりに使用します。詳細については、深層学習のデータ形式を参照してください。
データストア
データストアは、イメージとターゲットのバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに拡張や変換を適用したい場合に最適です。
イメージ データの場合、trainnet 関数は次のデータストアをサポートします。
| データストア | 説明 | 使用例 |
|---|---|---|
ImageDatastore | ディスクに保存されたイメージのデータストア。 | イメージのサイズがすべて等しい場合に、ディスクに保存されているイメージを使用してイメージ分類ニューラル ネットワークに学習させます。イメージのサイズが異なる場合は
|
augmentedImageDatastore | サイズ変更、回転、反転、せん断、平行移動を含む、ランダムなアフィン幾何学的変換を適用するデータストア。 |
|
TransformedDatastore | カスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア。 |
|
CombinedDatastore | 2 つ以上の基になるデータストアからデータを読み取るデータストア。 |
|
randomPatchExtractionDatastore (Image Processing Toolbox) | イメージまたはピクセル ラベル イメージからランダム パッチのペアを抽出し、必要に応じてこのペアに同一のアフィン幾何学的変換を適用するデータストア。 | オブジェクト検出用のニューラル ネットワークに学習させます。 |
denoisingImageDatastore (Image Processing Toolbox) | ランダムに生成されたガウス ノイズを適用するデータストア。 | イメージのノイズ除去用のニューラル ネットワークに学習させます。 |
| カスタム ミニバッチ データストア | データのミニバッチを返すカスタム データストア。 | 他のデータストアでサポートされていないレイアウトのデータを使用してニューラル ネットワークに学習させます。 詳細は、カスタム ミニバッチ データストアの開発を参照してください。 |
ターゲットを指定するには、データストアは numInputs+numOutputs 個の列をもつ cell 配列または table を返さなければなりません。ここで、numInputs と numOutputs は、それぞれネットワークの入力と出力の数です。最初の numInputs 個の列は、ネットワーク入力に対応します。最後の numOutput 個の列は、ネットワーク出力に対応します。ニューラル ネットワークの InputNames プロパティと OutputNames プロパティは、それぞれ入力データと出力データの順序を指定します。
ヒント
ImageDatastoreオブジェクトを使用すると、事前取得を使用して JPG または PNG イメージ ファイルのバッチ読み取りを行うことができます。イメージのサイズ変更を含む深層学習用のイメージの前処理を効率的に行うには、augmentedImageDatastoreオブジェクトを使用します。ImageDatastoreオブジェクトのReadFcnプロパティを使用しないでください。ReadFcnプロパティをカスタム関数に設定した場合、ImageDatastoreオブジェクトはイメージ ファイルを事前取得しないため、通常、速度が大幅に低下します。最高のパフォーマンスを得るために、
imageDatastoreなどのReadSizeプロパティをもつデータストアを使用してネットワークに学習させる場合は、ReadSizeプロパティとMiniBatchSize学習オプションを同じ値に設定します。augmentedImageDatastoreなどのMiniBatchSizeプロパティをもつデータストアを使用してネットワークに学習させる場合は、データストアのMiniBatchSizeプロパティとMiniBatchSize学習オプションを同じ値に設定します。
transform 関数と combine 関数を使用することで、他の組み込みのデータストアを使用して深層学習ニューラル ネットワークをテストできます。これらの関数は、データストアから読み取られたデータを trainnet 関数に必要なレイアウトに変換できます。データストア出力に必要なレイアウトは、ニューラル ネットワーク アーキテクチャによって異なります。詳細については、データストアのカスタマイズを参照してください。
minibatchqueue オブジェクト (R2024a 以降)
ソフトウェアがミニバッチを処理および変換する方法をより細かく制御するには、予測子とターゲットを返す minibatchqueue オブジェクトとしてデータを指定できます。
データを minibatchqueue オブジェクトとして指定すると、trainnet 関数はオブジェクトの MiniBatchSize プロパティを無視し、代わりに MiniBatchSize 学習オプションを使用します。
ターゲットを指定するには、minibatchqueue は numInputs+numOutputs 個の出力をもたなければなりません。ここで、numInputs と numOutputs は、それぞれネットワークの入力と出力の数です。最初の numInputs 個の出力は、ネットワーク入力に対応します。最後の numOutput 個の出力は、ネットワーク出力に対応します。ニューラル ネットワークの InputNames プロパティと OutputNames プロパティは、それぞれ入力データと出力データの順序を指定します。
メモ
この引数は、複素数値の予測子とターゲットをサポートします。
シーケンス データまたは時系列データ。数値配列、数値配列の cell 配列、dlarray オブジェクト、dlarray オブジェクトの cell 配列、データストア、または minibatchqueue オブジェクトを指定します。
メモリに収まり、追加の処理を必要としない同じ長さのシーケンスがある場合、入力データを数値配列として指定するのが通常最も簡単なオプションです。メモリに収まり、追加の処理を必要としないさまざまな長さのシーケンスがある場合、入力データを数値配列の cell 配列として指定するのが通常最も簡単なオプションです。ディスクに保存されているシーケンスを使用して学習させる場合、またはカスタム変換などの追加処理を適用する場合は、データストアを使用するのが通常最も簡単なオプションです。複数の入力をもつニューラル ネットワークの場合は、TransformedDatastore オブジェクトまたは CombinedDatastore オブジェクトを使用しなければなりません。
ヒント
ニューラル ネットワークには、特定のレイアウトをもつ入力データが必要です。たとえば、ベクトルシーケンス分類ネットワークは通常、t 行 c 列の配列として表されたベクトルシーケンスを必要とします。ここで、t と c は、それぞれタイム ステップの数とシーケンスのチャネル数です。ニューラル ネットワークの入力層では、通常、必要とされるデータ レイアウトが指定されています。
ほとんどのデータストアと関数は、ネットワークで必要とされるレイアウトでデータを出力します。データのレイアウトがネットワークで必要とされるレイアウトと異なる場合、データのレイアウトが異なることを示すために、InputDataFormats 学習オプションを使用するか、データを minibatchqueue オブジェクトとして指定して MiniBatchFormat プロパティを指定するか、形式を整えた dlarray オブジェクトとして入力データを指定します。通常、データ形式を指定することは、入力データを前処理するよりも簡単です。InputDataFormats 学習オプションと MiniBatchFormat minibatchqueue プロパティの両方を指定する場合、それらは一致していなければなりません。
入力層をもたないニューラル ネットワークの場合、InputDataFormats 学習オプションを使用するか、データを minibatchqueue オブジェクトとして指定して InputDataFormats プロパティを使用するか、形式を整えた dlarray オブジェクトを使用しなければなりません。
損失関数には、特定のレイアウトをもつデータが必要です。たとえば、sequence-to-vector 回帰ネットワークの場合、損失関数は通常、1 行 R 列のベクトルとして表されたターゲット ベクトルを必要とします。ここで、R は応答の数です。
ほとんどのデータストアと関数は、損失関数で必要とされるレイアウトでデータを出力します。ターゲット データが損失関数で必要とされるレイアウトと異なる場合、ターゲットのレイアウトが異なることを示すために、TargetDataFormats 学習オプションを使用するか、データを minibatchqueue オブジェクトとして指定して TargetDataFormats プロパティを指定するか、形式を整えた dlarray オブジェクトとしてターゲット データを指定します。通常、データ形式を指定することは、ターゲット データを前処理するよりも簡単です。TargetDataFormats 学習オプションと TargetDataFormats minibatchqueue プロパティの両方を指定する場合、それらは一致していなければなりません。
詳細については、深層学習のデータ形式を参照してください。
数値配列、categorical 配列、dlarray オブジェクト、または cell 配列
メモリに収まり、カスタム変換などの追加処理を必要としないデータの場合、単一のシーケンスを数値配列、categorical 配列、または dlarray オブジェクトとして指定するか、シーケンスのデータ セットを数値配列、categorical 配列、または dlarray オブジェクトから成る cell 配列として指定できます。シーケンスを数値配列、categorical 配列、cell 配列、または dlarray オブジェクトとして指定した場合は、targets 引数も指定しなければなりません。
cell 配列入力の場合、cell 配列は数値配列、categorical 配列、または dlarray オブジェクトから成る N 行 1 列の cell 配列でなければなりません。ここで、N は観測値の数です。
ソフトウェアは categorical 入力を自動的に数値に変換し、ニューラル ネットワークに渡します。ソフトウェアが categorical 入力を数値に変換する方法を指定するには、学習オプション関数の CategoricalInputEncoding 引数を使用します。
シーケンスを表す数値配列、categorical 配列、または dlarray オブジェクトのサイズと形状は、シーケンス データの種類によって異なり、InputDataFormats 学習オプションと一致していなければなりません。
次の表のレイアウトにおいて、シーケンス入力層をもつほとんどのネットワークでは、trainnet 関数にシーケンス データを渡す必要があります。
| データ | レイアウト |
|---|---|
| ベクトル シーケンス | s 行 c 列の行列。ここで、s と c はそれぞれシーケンスのタイム ステップ数とチャネル (特徴) 数です。 |
| categorical ベクトル シーケンス | s 行 1 列の categorical 配列。ここで、s はシーケンスのタイム ステップ数です。 |
| 1 次元イメージ シーケンス | h x c x s の配列。ここで、h および c はそれぞれイメージの高さおよびチャネル数に対応します。s はシーケンス長です。 |
| categorical 1 次元イメージ シーケンス | h×1×s の categorical 配列。ここで、h はイメージの高さに対応します。s はシーケンス長です。 |
| 2 次元イメージ シーケンス | h x w x c x s の配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数に対応します。s はシーケンス長です。 |
| categorical 2 次元イメージ シーケンス | h×w×1×s の配列。ここで、h と w はそれぞれイメージの高さと幅に対応します。s はシーケンス長です。 |
| 3 次元イメージ シーケンス | h x w x d x c x s。ここで、h、w、d、および c は、それぞれ 3 次元イメージの高さ、幅、深さ、およびチャネル数に対応します。s はシーケンス長です。 |
| categorical 3 次元イメージ シーケンス | h×w×d×1×s。ここで、h、w、d は、それぞれ 3 次元イメージの高さ、幅、深さに対応します。s はシーケンス長です。 |
異なるレイアウトのデータの場合は、InputDataFormats 学習オプションを使用してデータのレイアウトが異なることを示すか、形式を整えた dlarray オブジェクトを代わりに使用します。詳細については、深層学習のデータ形式を参照してください。
データストア
データストアは、シーケンスとターゲットのバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに変換を適用したい場合に最適です。
シーケンス データおよび時系列データの場合、trainnet 関数は次のデータストアをサポートします。
| データストア | 説明 | 使用例 |
|---|---|---|
TransformedDatastore | カスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア。 |
|
CombinedDatastore | 2 つ以上の基になるデータストアからデータを読み取るデータストア。 | 異なるデータ ソースから取得した予測子とターゲットを結合する。 |
| カスタム ミニバッチ データストア | データのミニバッチを返すカスタム データストア。 | 他のデータストアでサポートされていないレイアウトのデータを使用してニューラル ネットワークに学習させます。 詳細は、カスタム ミニバッチ データストアの開発を参照してください。 |
ターゲットを指定するには、データストアは numInputs+numOutputs 個の列をもつ cell 配列または table を返さなければなりません。ここで、numInputs と numOutputs は、それぞれネットワークの入力と出力の数です。最初の numInputs 個の列は、ネットワーク入力に対応します。最後の numOutput 個の列は、ネットワーク出力に対応します。ニューラル ネットワークの InputNames プロパティと OutputNames プロパティは、それぞれ入力データと出力データの順序を指定します。
transform 関数と combine 関数を使用して、他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを trainnet 関数に必要なレイアウトに変換できます。たとえば、ArrayDatastore オブジェクトおよび TabularTextDatastore オブジェクトをそれぞれ使用して、インメモリ配列および CSV ファイルから読み取ったデータの変換と結合を行うことができます。データストア出力に必要なレイアウトは、ニューラル ネットワーク アーキテクチャによって異なります。詳細については、データストアのカスタマイズを参照してください。
minibatchqueue オブジェクト (R2024a 以降)
ソフトウェアがミニバッチを処理および変換する方法をより細かく制御するには、予測子とターゲットを返す minibatchqueue オブジェクトとしてデータを指定できます。
データを minibatchqueue オブジェクトとして指定すると、trainnet 関数はオブジェクトの MiniBatchSize プロパティを無視し、代わりに MiniBatchSize 学習オプションを使用します。
ターゲットを指定するには、minibatchqueue は numInputs+numOutputs 個の出力をもたなければなりません。ここで、numInputs と numOutputs は、それぞれネットワークの入力と出力の数です。最初の numInputs 個の出力は、ネットワーク入力に対応します。最後の numOutput 個の出力は、ネットワーク出力に対応します。ニューラル ネットワークの InputNames プロパティと OutputNames プロパティは、それぞれ入力データと出力データの順序を指定します。
メモ
この引数は、複素数値の予測子とターゲットをサポートします。
特徴または表形式のデータ。数値配列、データストア、table、または minibatchqueue オブジェクトとして指定します。
メモリに収まり、追加の処理を必要としないデータがある場合、入力データを数値配列または table として指定するのが通常最も簡単なオプションです。ディスクに保存されている特徴データまたは表形式データを使用して学習させる場合、またはカスタム変換などの追加処理を適用する場合は、データストアを使用するのが通常最も簡単なオプションです。複数の入力をもつニューラル ネットワークの場合は、TransformedDatastore オブジェクトまたは CombinedDatastore オブジェクトを使用しなければなりません。
ヒント
ニューラル ネットワークには、特定のレイアウトをもつ入力データが必要です。たとえば、特徴分類ネットワークは通常、1 行 c 列のベクトルとして表された特徴と表形式のデータを必要とします。ここで、c はデータの特徴の数です。ニューラル ネットワークの入力層では、通常、必要とされるデータ レイアウトが指定されています。
ほとんどのデータストアと関数は、ネットワークで必要とされるレイアウトでデータを出力します。データのレイアウトがネットワークで必要とされるレイアウトと異なる場合、データのレイアウトが異なることを示すために、InputDataFormats 学習オプションを使用するか、データを minibatchqueue オブジェクトとして指定して MiniBatchFormat プロパティを指定するか、形式を整えた dlarray オブジェクトとして入力データを指定します。通常、データ形式を指定することは、入力データを前処理するよりも簡単です。InputDataFormats 学習オプションと MiniBatchFormat minibatchqueue プロパティの両方を指定する場合、それらは一致していなければなりません。
入力層をもたないニューラル ネットワークの場合、InputDataFormats 学習オプションを使用するか、データを minibatchqueue オブジェクトとして指定して InputDataFormats プロパティを使用するか、形式を整えた dlarray オブジェクトを使用しなければなりません。
損失関数には、特定のレイアウトをもつデータが必要です。たとえば、sequence-to-vector 回帰ネットワークの場合、損失関数は通常、1 行 R 列のベクトルとして表されたターゲット ベクトルを必要とします。ここで、R は応答の数です。
ほとんどのデータストアと関数は、損失関数で必要とされるレイアウトでデータを出力します。ターゲット データが損失関数で必要とされるレイアウトと異なる場合、ターゲットのレイアウトが異なることを示すために、TargetDataFormats 学習オプションを使用するか、データを minibatchqueue オブジェクトとして指定して TargetDataFormats プロパティを指定するか、形式を整えた dlarray オブジェクトとしてターゲット データを指定します。通常、データ形式を指定することは、ターゲット データを前処理するよりも簡単です。TargetDataFormats 学習オプションと TargetDataFormats minibatchqueue プロパティの両方を指定する場合、それらは一致していなければなりません。
詳細については、深層学習のデータ形式を参照してください。
数値配列または dlarray オブジェクト
メモリに収まり、なおかつカスタム変換などの追加の処理を必要としない特徴データの場合、特徴データを数値配列として指定できます。特徴データを数値配列として指定した場合、targets 引数も指定しなければなりません。
数値配列と形式を整えていない dlarray オブジェクトのレイアウトは、InputDataFormats 学習オプションと一致していなければなりません。特徴入力をもつほとんどのネットワークでは、N 行 numFeatures 列の配列として指定した入力データが必要です。ここで、N は観測値の数、numFeatures は入力データの特徴の数です。
異なるレイアウトのデータの場合は、InputDataFormats 学習オプションを使用してデータのレイアウトが異なることを示すか、形式を整えた dlarray オブジェクトを代わりに使用します。詳細については、深層学習のデータ形式を参照してください。
categorical 配列 (R2025a 以降)
メモリに収まり、カスタム変換などの追加処理を必要としない個別の特徴の場合は、特徴データを categorical 配列として指定できます。
特徴を categorical 配列として指定した場合は、targets 引数も指定しなければなりません。
ソフトウェアは categorical 入力を自動的に数値に変換し、ニューラル ネットワークに渡します。ソフトウェアが categorical 入力を数値に変換する方法を指定するには、学習オプション関数の CategoricalInputEncoding 引数を使用します。categorical 配列のレイアウトは、学習オプション関数の InputDataFormats 引数と一致していなければなりません。
カテゴリカル特徴量入力をもつほとんどのネットワークでは、N 行 1 列のベクトルとして指定した入力データが必要です。ここで、N は観測数です。ソフトウェアがこのデータを数値配列に変換すると、このレイアウトのデータ形式は "BC" (バッチ、チャネル) になります。"C" (チャネル) 次元のサイズは、学習オプション関数の CategoricalInputEncoding 引数によって異なります。
異なるレイアウトのデータの場合は、InputDataFormats 学習オプションを使用してデータのレイアウトが異なることを示すか、形式を整えた dlarray オブジェクトを代わりに使用します。詳細については、深層学習のデータ形式を参照してください。
table (R2024a 以降)
メモリに収まり、カスタム変換などの追加処理を必要としない特徴データの場合、特徴データを table として指定できます。特徴データを table として指定した場合、targets 引数を指定してはなりません。
特徴データを table として指定するには、numObservations 個の行と numFeatures+1 個の列をもつ table を指定します。ここで、numObservations と numFeatures は、それぞれ入力データの観測値と特徴の数です。trainnet 関数は、最初の numFeatures 個の列を入力特徴として使用し、最後の列をターゲットとして使用します。
データストア
データストアは、特徴データとターゲットのバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに変換を適用したい場合に最適です。
特徴データおよび表形式データの場合、trainnet 関数は次のデータストアをサポートします。
| データ型 | 説明 | 使用例 |
|---|---|---|
TransformedDatastore | カスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア。 |
|
CombinedDatastore | 2 つ以上の基になるデータストアからデータを読み取るデータストア。 |
|
| カスタム ミニバッチ データストア | データのミニバッチを返すカスタム データストア。 | 他のデータストアでサポートされていないレイアウトのデータを使用してニューラル ネットワークに学習させます。 詳細は、カスタム ミニバッチ データストアの開発を参照してください。 |
ターゲットを指定するには、データストアは numInputs+numOutputs 個の列をもつ cell 配列または table を返さなければなりません。ここで、numInputs と numOutputs は、それぞれネットワークの入力と出力の数です。最初の numInputs 個の列は、ネットワーク入力に対応します。最後の numOutput 個の列は、ネットワーク出力に対応します。ニューラル ネットワークの InputNames プロパティと OutputNames プロパティは、それぞれ入力データと出力データの順序を指定します。
関数 transform および combine を使用して、深層学習ニューラル ネットワークに学習させるための他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを、trainnet に必要な table または cell 配列形式に変換できます。詳細については、データストアのカスタマイズを参照してください。
minibatchqueue オブジェクト (R2024a 以降)
ソフトウェアがミニバッチを処理および変換する方法をより細かく制御するには、予測子とターゲットを返す minibatchqueue オブジェクトとしてデータを指定できます。
データを minibatchqueue オブジェクトとして指定すると、trainnet 関数はオブジェクトの MiniBatchSize プロパティを無視し、代わりに MiniBatchSize 学習オプションを使用します。
ターゲットを指定するには、minibatchqueue は numInputs+numOutputs 個の出力をもたなければなりません。ここで、numInputs と numOutputs は、それぞれネットワークの入力と出力の数です。最初の numInputs 個の出力は、ネットワーク入力に対応します。最後の numOutput 個の出力は、ネットワーク出力に対応します。ニューラル ネットワークの InputNames プロパティと OutputNames プロパティは、それぞれ入力データと出力データの順序を指定します。
メモ
この引数は、複素数値の予測子とターゲットをサポートします。
汎用データまたはデータ型の組み合わせ。数値配列、dlarray オブジェクト、データストア、または minibatchqueue オブジェクトとして指定します。
メモリに収まり、追加の処理を必要としないデータがある場合、入力データを数値配列として指定するのが通常最も簡単なオプションです。ディスクに保存されたデータを使用して学習させる場合、または追加の処理を適用する場合は、データストアを使用するのが通常最も簡単なオプションです。複数の入力をもつニューラル ネットワークの場合は、TransformedDatastore オブジェクトまたは CombinedDatastore オブジェクトを使用しなければなりません。
ヒント
ニューラル ネットワークには、特定のレイアウトをもつ入力データが必要です。たとえば、ベクトルシーケンス分類ネットワークは通常、t 行 c 列の配列として表されたベクトルシーケンスを必要とします。ここで、t と c は、それぞれタイム ステップの数とシーケンスのチャネル数です。ニューラル ネットワークの入力層では、通常、必要とされるデータ レイアウトが指定されています。
ほとんどのデータストアと関数は、ネットワークで必要とされるレイアウトでデータを出力します。データのレイアウトがネットワークで必要とされるレイアウトと異なる場合、データのレイアウトが異なることを示すために、InputDataFormats 学習オプションを使用するか、データを minibatchqueue オブジェクトとして指定して MiniBatchFormat プロパティを指定するか、形式を整えた dlarray オブジェクトとして入力データを指定します。通常、データ形式を指定することは、入力データを前処理するよりも簡単です。InputDataFormats 学習オプションと MiniBatchFormat minibatchqueue プロパティの両方を指定する場合、それらは一致していなければなりません。
入力層をもたないニューラル ネットワークの場合、InputDataFormats 学習オプションを使用するか、データを minibatchqueue オブジェクトとして指定して InputDataFormats プロパティを使用するか、形式を整えた dlarray オブジェクトを使用しなければなりません。
損失関数には、特定のレイアウトをもつデータが必要です。たとえば、sequence-to-vector 回帰ネットワークの場合、損失関数は通常、1 行 R 列のベクトルとして表されたターゲット ベクトルを必要とします。ここで、R は応答の数です。
ほとんどのデータストアと関数は、損失関数で必要とされるレイアウトでデータを出力します。ターゲット データが損失関数で必要とされるレイアウトと異なる場合、ターゲットのレイアウトが異なることを示すために、TargetDataFormats 学習オプションを使用するか、データを minibatchqueue オブジェクトとして指定して TargetDataFormats プロパティを指定するか、形式を整えた dlarray オブジェクトとしてターゲット データを指定します。通常、データ形式を指定することは、ターゲット データを前処理するよりも簡単です。TargetDataFormats 学習オプションと TargetDataFormats minibatchqueue プロパティの両方を指定する場合、それらは一致していなければなりません。
詳細については、深層学習のデータ形式を参照してください。
数値配列、categorical 配列、または dlarray オブジェクト
メモリに収まり、カスタム変換などの追加処理を必要としないデータの場合は、データを数値配列、categorical 配列、または dlarray オブジェクトとして指定できます。データを数値配列として指定した場合、targets 引数も指定しなければなりません。
inputLayer オブジェクトをもつニューラル ネットワークの場合、必要とされる入力データのレイアウトは、層の InputFormat プロパティで指定します。
ソフトウェアは categorical 入力を自動的に数値に変換し、ニューラル ネットワークに渡します。ソフトウェアが categorical 入力を数値に変換する方法を指定するには、学習オプション関数の CategoricalInputEncoding 引数を使用します。categorical 配列のレイアウトは、学習オプション関数の InputDataFormats 引数と一致していなければなりません。
異なるレイアウトのデータの場合は、InputDataFormats 学習オプションを使用してデータのレイアウトが異なることを示すか、形式を整えた dlarray オブジェクトを代わりに使用します。詳細については、深層学習のデータ形式を参照してください。
データストア
データストアは、データとターゲットのバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに変換を適用したい場合に最適です。
汎用データまたはデータ型の組み合わせの場合、trainnet 関数は次のデータストアをサポートします。
| データ型 | 説明 | 使用例 |
|---|---|---|
TransformedDatastore | カスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア。 |
|
CombinedDatastore | 2 つ以上の基になるデータストアからデータを読み取るデータストア。 |
|
| カスタム ミニバッチ データストア | データのミニバッチを返すカスタム データストア。 | 他のデータストアでサポートされていない形式のデータを使用してニューラル ネットワークに学習させます。 詳細は、カスタム ミニバッチ データストアの開発を参照してください。 |
ターゲットを指定するには、データストアは numInputs+numOutputs 個の列をもつ cell 配列または table を返さなければなりません。ここで、numInputs と numOutputs は、それぞれネットワークの入力と出力の数です。最初の numInputs 個の列は、ネットワーク入力に対応します。最後の numOutput 個の列は、ネットワーク出力に対応します。ニューラル ネットワークの InputNames プロパティと OutputNames プロパティは、それぞれ入力データと出力データの順序を指定します。
transform 関数と combine 関数を使用して、他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを、trainnet に必要な table または cell 配列形式に変換できます。詳細については、データストアのカスタマイズを参照してください。
minibatchqueue オブジェクト (R2024a 以降)
ソフトウェアがミニバッチを処理および変換する方法をより細かく制御するには、予測子とターゲットを返す minibatchqueue オブジェクトとしてデータを指定できます。
データを minibatchqueue オブジェクトとして指定すると、trainnet 関数はオブジェクトの MiniBatchSize プロパティを無視し、代わりに MiniBatchSize 学習オプションを使用します。
ターゲットを指定するには、minibatchqueue は numInputs+numOutputs 個の出力をもたなければなりません。ここで、numInputs と numOutputs は、それぞれネットワークの入力と出力の数です。最初の numInputs 個の出力は、ネットワーク入力に対応します。最後の numOutput 個の出力は、ネットワーク出力に対応します。ニューラル ネットワークの InputNames プロパティと OutputNames プロパティは、それぞれ入力データと出力データの順序を指定します。
メモ
この引数は、複素数値の予測子とターゲットをサポートします。
学習ターゲット。categorical 配列、数値配列、またはシーケンスの cell 配列として指定します。
複数の出力をもつネットワークのターゲットを指定するには、images、sequences、features、または data の各引数を使用してターゲットを指定します。
ヒント
損失関数には、特定のレイアウトをもつデータが必要です。たとえば、sequence-to-vector 回帰ネットワークの場合、損失関数は通常、1 行 R 列のベクトルとして表されたターゲット ベクトルを必要とします。ここで、R は応答の数です。
ほとんどのデータストアと関数は、損失関数で必要とされるレイアウトでデータを出力します。ターゲット データが損失関数で必要とされるレイアウトと異なる場合、ターゲットのレイアウトが異なることを示すために、TargetDataFormats 学習オプションを使用するか、データを minibatchqueue オブジェクトとして指定して TargetDataFormats プロパティを指定するか、形式を整えた dlarray オブジェクトとしてターゲット データを指定します。通常、データ形式を指定することは、ターゲット データを前処理するよりも簡単です。TargetDataFormats 学習オプションと TargetDataFormats minibatchqueue プロパティの両方を指定する場合、それらは一致していなければなりません。
詳細については、深層学習のデータ形式を参照してください。
必要とされるターゲットのレイアウトは、損失関数とタスクの種類によって異なります。ここにリストされているターゲットはサブセットのみです。損失関数は、追加の次元をもつターゲットなど、異なるレイアウトをもつ追加のターゲットをサポートする場合があります。カスタム損失関数の場合、ソフトウェアはネットワーク出力データの形式情報を使用してターゲット データの種類を判定し、次の表の対応するレイアウトを適用します。
| 損失関数 | ターゲット | ターゲットのレイアウト |
|---|---|---|
"crossentropy" | カテゴリカル ラベル | ラベルの N 行 1 列の categorical ベクトル。N は観測値の数です。 |
| カテゴリカル ラベルのシーケンス |
| |
"index-crossentropy" | カテゴリカル ラベル | ラベルの N 行 1 列の categorical ベクトル。N は観測値の数です。 |
| クラス インデックス | クラス インデックスの N 行 1 列の数値ベクトル。ここで、N は観測値の数です。 | |
| カテゴリカル ラベルのシーケンス |
| |
| クラス インデックスのシーケンス |
| |
"binary-crossentropy" | バイナリ ラベル (単一のラベル) | N 行 1 列のベクトル。ここで、N は観測値の数です。 |
| バイナリ ラベル (複数ラベル) | N 行 c 列の行列。ここで、N と c はそれぞれ観測値とクラスの数です。 | |
| 数値スカラー | N 行 1 列のベクトル。ここで、N は観測値の数です。 |
| 数値ベクトル | N 行 R 列の行列。N は観測値の数、R は応答の数です。 | |
| 2 次元イメージ | h x w x c x N の数値配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数です。N はイメージの数です。 | |
| 3 次元イメージ |
| |
| スカラーの数値シーケンス |
| |
| ベクトルの数値シーケンス |
| |
| 1 次元イメージのシーケンス |
| |
| 2 次元イメージのシーケンス |
| |
| 3 次元イメージのシーケンス |
|
異なるレイアウトのターゲットの場合は、TargetDataFormats 学習オプションを使用してターゲットのレイアウトが異なることを示すか、代わりに形式を整えた dlarray オブジェクトを使用します。詳細については、深層学習のデータ形式を参照してください。
ソフトウェアは、categorical ターゲットを数値に自動的に変換し、損失関数とメトリクス関数に渡します。"index-crossentropy" 損失関数を使用して学習させる場合、ソフトウェアは categorical ターゲットを整数値に変換します。それ以外の場合、ソフトウェアは categorical ターゲットを one-hot 符号化されたベクトルに変換します。
ソフトウェアが categorical ターゲットを数値に変換する方法を指定するには、学習オプション関数の CategoricalTargetEncoding 引数を使用します。 (R2025a 以降)
ヒント
ターゲットの正規化は、回帰用のニューラル ネットワークの学習の安定化と高速化に役立つことがよくあります。詳細については、回帰用の畳み込みニューラル ネットワークの学習を参照してください。
学習の詳細
ニューラル ネットワーク アーキテクチャ。dlnetwork オブジェクトまたは層配列として指定します。
組み込みのニューラル ネットワーク層の一覧については、深層学習層の一覧を参照してください。
学習に使用する損失関数。次のいずれかの値として指定します。
"crossentropy"— 分類タスクのクロスエントロピー損失。ネットワーク出力の非チャネル要素数で除算して正規化します。"index-crossentropy"(R2024b 以降) — 分類タスクのインデックス クロスエントロピー損失。ターゲット内の要素数で除算して正規化します。categorical クラスが多数ある場合は、このオプションを使用してメモリを節約します。"binary-crossentropy"— バイナリおよびマルチラベルの分類タスクのバイナリ クロスエントロピー損失。ネットワーク出力の要素数で除算して正規化します。"mae"/"mean-absolute-error"/"l1loss"— 回帰タスクの平均絶対誤差。ネットワーク出力の要素数で除算して正規化します。"mse"/"mean-squared-error"/"l2loss"— 回帰タスクの平均二乗誤差。ネットワーク出力の要素数で除算して正規化します。"huber"— 回帰タスクの Huber 損失。ネットワーク出力の要素数で除算して正規化します。構文
loss = f(Y1,...,Yn,T1,...,Tm)をもつ関数ハンドル。ここで、Y1,...,Ynはn個のネットワーク予測に対応するdlarrayオブジェクトであり、T1,...,Tmはm個のターゲットに対応するdlarrayオブジェクトです。deep.DifferentiableFunctionオブジェクト (R2024a 以降) — カスタム逆方向関数をもつ関数オブジェクト。
ヒント
重み付きクロスエントロピーの場合は、関数ハンドル @(Y,T)crossentropy(Y,T,weights) を使用します。
カスタム関数の定義の詳細については、Define Custom Deep Learning Operationsを参照してください。
学習オプション。trainingOptions 関数によって返される TrainingOptionsSGDM オブジェクト、TrainingOptionsRMSProp オブジェクト、TrainingOptionsADAM オブジェクト、TrainingOptionsLBFGS オブジェクト、または TrainingOptionsLM オブジェクトとして指定します。
出力引数
学習済みネットワーク。dlnetwork オブジェクトとして返されます。
学習情報。次のプロパティをもつ TrainingInfo オブジェクトとして返されます。
TrainingHistory— 学習の反復に関する情報ValidationHistory— 検証の反復に関する情報OutputNetworkIteration— 学習済みのネットワークに対応する反復StopReason— 学習が停止した理由
また、info を使用することで、show 関数と close 関数を使用して学習の進行状況プロットを開いたり閉じたりすることもできます。
詳細
既定では、関数 trainnet および単精度浮動小数点演算を使用して、ニューラル ネットワークに学習させるための計算が実行されます。関数 trainnet は、単精度の学習可能なパラメーターと状態パラメーターをもつネットワークを返します。
予測関数か検証関数を単精度の学習可能なパラメーターと状態パラメーターをもつ dlnetwork オブジェクトと組み合わせて使用する場合、単精度浮動小数点演算を使用して計算が実行されます。
最高のパフォーマンスを提供するために、GPU を使用した MATLAB® での深層学習は確定的であることを保証しません。ネットワーク アーキテクチャによっては、GPU を使用して 2 つの同一のネットワークに学習させたり、同じネットワークとデータを使用して 2 つの予測を行ったりする場合に、ある条件下で異なる結果が得られることがあります。GPU を使用して深層学習演算を実行するときに確定性が必要な場合は、deep.gpu.deterministicAlgorithms 関数 (R2024b 以降)を使用します。
rng 関数を使用して同じ乱数発生器とシードを設定した場合、次の場合を除き、CPU を使用した学習は再現性をもちます。
PreprocessingEnvironment学習オプションを"background"または"parallel"に設定する。学習データは、
PreprocessingEnvironmentプロパティが"background"または"parallel"に設定されたminibatchqueueオブジェクトである。
ヒント
回帰タスクでは、ターゲットの正規化が学習の安定化と高速化に役立つことがよくあります。詳細については、回帰用の畳み込みニューラル ネットワークの学習を参照してください。
ほとんどの場合、予測子またはターゲットに
NaN値が含まれていると、それらはネットワークを通じて伝播され、学習は収束に失敗します。数値配列をデータストアに変換するには、
ArrayDatastoreを使用します。データのタイプが混在するニューラル ネットワークで層を結合する場合、データを結合層 (連結層や追加層など) に渡す前に再構築しなければならない場合があります。データを再構築するには、フラット化層を使用して空間次元をチャネル次元にフラット化するか、データを再構築および形状変更する
FunctionLayerオブジェクトまたはカスタム層を作成します。
アルゴリズム
ほとんどのデータストアは、ニューラル ネットワークで必要とされるレイアウトでデータを出力します。独自のデータストアを作成する場合、またはデータストアにカスタム変換を適用する場合は、サポートされているレイアウトでデータストアが必ずデータを出力するようにしなければなりません。
主に次の 2 つの側面があります。
データ バッチの構造。データストアは、観測値に対応する行と、入力およびターゲットに対応する列を含む table または cell 配列を出力しなければなりません。
予測子とターゲットのレイアウト。たとえば、予測子とターゲットは、ネットワークと損失関数によってサポートされているレイアウトにとどまっていなければなりません。
ニューラル ネットワークの学習にデータストアを使用する場合、データストアの出力の構造はニューラル ネットワークのアーキテクチャによって異なります。
| ニューラル ネットワーク アーキテクチャ | データストア出力 | cell 配列出力の例 | table 出力の例 |
|---|---|---|---|
| 1 つの入力層と 1 つの出力 | 2 列の table または cell 配列。 最初の列と 2 番目の列は、それぞれ予測子とターゲットを指定します。 table の要素は、スカラー、行ベクトルであるか、数値配列が格納された 1 行 1 列の cell 配列でなければなりません。 カスタム ミニバッチ データストアは、table を出力しなければなりません。 | 1 つの入力と 1 つの出力があるニューラル ネットワークの cell 配列: data = read(ds) data =
4×2 cell array
{224×224×3 double} {[2]}
{224×224×3 double} {[7]}
{224×224×3 double} {[9]}
{224×224×3 double} {[9]} | 1 つの入力と 1 つの出力があるニューラル ネットワークの table: data = read(ds) data =
4×2 table
Predictors Response
__________________ ________
{224×224×3 double} 2
{224×224×3 double} 7
{224×224×3 double} 9
{224×224×3 double} 9
|
| 複数の入力層と複数の出力 | ( 最初の 入力と出力の順序は、ニューラル ネットワークの | 2 つの入力と 2 つの出力があるニューラル ネットワークの cell 配列。 data = read(ds) data =
4×4 cell array
{224×224×3 double} {128×128×3 double} {[2]} {[-42]}
{224×224×3 double} {128×128×3 double} {[2]} {[-15]}
{224×224×3 double} {128×128×3 double} {[9]} {[-24]}
{224×224×3 double} {128×128×3 double} {[9]} {[-44]} | サポートなし |
データストアは、table または cell 配列でデータを返さなければなりません。カスタム ミニバッチ データストアは、table を出力しなければなりません。
ニューラル ネットワークと損失関数には、特定のレイアウトの入力データが必要です。たとえば、ベクトルシーケンス分類ネットワークは、通常、t 行 c 列の数値配列として表されたシーケンスを必要とします。ここで、t および c は、それぞれタイム ステップの数とシーケンスのチャネル数です。ニューラル ネットワークの入力層では、通常、必要とされるデータ レイアウトが指定されています。
ほとんどのデータストアと関数は、ネットワークと損失関数で必要とされるレイアウトでデータを出力します。データのレイアウトがネットワークまたは損失関数で必要とされるレイアウトと異なる場合、InputDataFormats 学習オプションおよび TargetDataFormats 学習オプションを使用するか、形式を整えた dlarray オブジェクトとしてデータを指定し、データのレイアウトが異なることを示します。通常、InputDataFormats 学習オプションおよび TargetDataFormats 学習オプションを調整することは、入力データを前処理するよりも簡単です。
入力層をもたないニューラル ネットワークの場合、InputDataFormats 学習オプションまたは形式を整えた dlarray オブジェクトを使用しなければなりません。
詳細については、深層学習のデータ形式を参照してください。
ほとんどのネットワークでは、次のデータ レイアウトの予測子が必要です。
イメージ入力
| データ | 予測子のレイアウト |
|---|---|
| 2 次元イメージ | h x w x c の数値配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数です。 |
| 3 次元イメージ | h x w x d x c の数値配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数です。 |
シーケンス入力
| データ | 予測子のレイアウト |
|---|---|
| ベクトル シーケンス | s 行 c 列の行列。ここで、s はシーケンス長、c はシーケンスの特徴の数です。 |
| 1 次元イメージ シーケンス | h x c x s の配列。ここで、h および c はそれぞれイメージの高さおよびチャネル数に対応します。s はシーケンス長です。 バッチ内の各シーケンスは、同じシーケンス長でなければなりません。 |
| 2 次元イメージ シーケンス | h x w x c x s の配列。ここで、h、w、および c はそれぞれイメージの高さ、幅、およびチャネル数に対応します。s はシーケンス長です。 バッチ内の各シーケンスは、同じシーケンス長でなければなりません。 |
| 3 次元イメージ シーケンス | h x w x d x c x s の配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数に対応します。s はシーケンス長です。 バッチ内の各シーケンスは、同じシーケンス長でなければなりません。 |
特徴入力
| データ | 予測子のレイアウト |
|---|---|
| 特徴 | c 行 1 列の列ベクトル。c は特徴の数です。 |
ほとんどの損失関数は、ターゲットに応じて次のデータ レイアウトを必要とします。
| ターゲット | ターゲットのレイアウト |
|---|---|
| カテゴリカル ラベル | categorical スカラー。 |
| カテゴリカル ラベルのシーケンス | t 行 1 列の categorical ベクトル。ここで、t はタイム ステップ数です。 |
| バイナリ ラベル (単一のラベル) | 数値スカラー |
| バイナリ ラベル (複数ラベル) | 1 行 c 列のベクトル。ここで、c はそれぞれクラスの数です。 |
| 数値スカラー | 数値スカラー |
| 数値ベクトル | 1 行 R 列のベクトル。ここで、R は応答の数です。 |
| 2 次元イメージ | h x w x c の数値配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数です。 |
| 3 次元イメージ | h x w x d x c の数値配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数です。 |
| スカラーの数値シーケンス | t 行 1 列のベクトル。ここで、t はタイム ステップ数です。 |
| ベクトルの数値シーケンス | t 行 c 列の配列。ここで、t と c はそれぞれタイム ステップ数とチャネル数です。 |
| 1 次元イメージのシーケンス | h×c×t の配列。ここで、h、c、および t は、それぞれシーケンスの高さ、チャネル数、およびタイム ステップ数です。 |
| 2 次元イメージのシーケンス | h×w×c×t の配列。ここで、h、w、c、および t は、それぞれシーケンスの高さ、幅、チャネル数、およびタイム ステップ数です。 |
| 3 次元イメージのシーケンス | h×w×d×c×t の配列。ここで、h、w、d、c、および t は、それぞれシーケンスの高さ、幅、深さ、チャネル数、およびタイム ステップ数です。 |
詳細については、深層学習のデータ形式を参照してください。
拡張機能
この関数は、GPU による高速化を完全にサポートします。
既定では、trainnet 関数は利用可能な GPU がある場合にそれを使用します。trainnet 関数が使用するハードウェアは、trainingOptions 関数を使用して ExecutionEnvironment 学習オプションを設定することで指定できます。
詳細については、Scale Up Deep Learning in Parallel, on GPUs, and in the Cloudを参照してください。
バージョン履歴
R2023b で導入ソフトウェアは、categorical 入力データと categorical ターゲットを自動的に数値に変換し、それぞれニューラル ネットワークと損失関数に渡します。ソフトウェアが categorical 入力データと categorical ターゲットを符号化する方法を指定するには、trainingOptions 関数の CategoricalInputEncoding 引数と CategoricalTargetEncoding 引数をそれぞれ使用します。
インデックス クロスエントロピー損失は、"スパース クロスエントロピー損失" とも呼ばれ、標準的なクロスエントロピー損失アルゴリズムよりもメモリ効率と計算効率に優れた代替手段です。ターゲットを one-hot 符号化ベクトルに変換する必要のある "crossentropy" 損失関数とは異なり、"index-crossentropy" 関数は、categorical ターゲットの整数値に対して直接演算を行います。
インデックス クロスエントロピー損失の使用は、多数のクラスにわたる予測など、one-hot 符号化されたデータによって不要なメモリ オーバーヘッドが発生する場合に適しています。
インデックス クロスエントロピー損失を指定するには、lossFcn 引数を "index-crossentropy" として指定します。
trainnet 関数には次の利点があるため、trainNetwork 関数よりも推奨されます。
trainnetはdlnetworkオブジェクトをサポートしています。このオブジェクトは、ユーザーが作成したり外部のプラットフォームからインポートしたりできる、さまざまなネットワーク アーキテクチャをサポートしています。trainnetを使用すると、損失関数を簡単に指定できます。組み込みの損失関数を選択するか、カスタム損失関数を指定できます。trainnetはdlnetworkオブジェクトを出力します。このオブジェクトは、ネットワークの構築、予測、組み込み学習、可視化、圧縮、検証、およびカスタム学習ループをサポートする統合されたデータ型です。trainnetは、通常、trainNetworkよりも高速です。
メモリ内の特徴データを minibatchqueue オブジェクトとして指定します。
features 引数を使用して、メモリ内の特徴データを table として指定します。
損失関数を deep.DifferentiableFunction オブジェクトとして指定します。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)