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]; numClasses = numel(categories(imds.Labels)); 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);
ラベル付きテスト セットを使用してネットワークをテストします。
テスト データストアからイメージ データとラベルを抽出します。
XTest = readall(imdsTest); TTest = imdsTest.Labels; classNames = categories(TTest);
イメージを数値配列に連結し、single に変換します。
XTest = cat(4,XTest{:}); XTest = single(XTest);
学習済みネットワークを使用して分類スコアを予測し、関数 onehotdecode
を使用して予測結果をラベルに変換します。
YTest = minibatchpredict(net,XTest); YTest = onehotdecode(YTest,classNames,2);
混同チャートで予測を可視化します。
confusionchart(TTest,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 = 2x1 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 配列に変換します。特徴量を入力する場合、ネットワークは、観測値に対応する行と特徴量に対応する列をもつデータを必要とします。データのレイアウトがこれとは異なる場合、このレイアウトになるようにデータを前処理するか、データ形式を使用してレイアウト情報を指定します。詳細については、Deep Learning Data Formatsを参照してください。
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);
学習済みネットワークを使用してテスト データのラベルを予測します。学習済みネットワークを使用して分類スコアを予測し、関数 onehotdecode
を使用して予測結果をラベルに変換します。
YTest = minibatchpredict(net,XTest); YTest = onehotdecode(YTest,classNames,2);
混同チャートで予測を可視化します。
confusionchart(TTest,YTest)
分類精度を計算します。この精度は、ネットワークが正しく予測するラベルの割合です。
accuracy = mean(YTest == TTest)
accuracy = 1
入力引数
images
— イメージ データ
数値配列 | dlarray
オブジェクト | データストア | minibatchqueue
オブジェクト (R2024a 以降)
イメージ データ。数値配列、dlarray
オブジェクト、データストア、または minibatchqueue
オブジェクトとして指定します。
ヒント
ビデオ データのようなイメージのシーケンスの場合、入力引数 sequences
を使用します。
メモリに収まり、データ拡張などの追加処理を必要としないデータがある場合、入力データを数値配列として指定するのが通常最も簡単なオプションです。ディスクに保存されているイメージ ファイルを使用して学習させる場合、またはデータ拡張などの追加処理を適用する場合は、データストアを使用するのが通常最も簡単なオプションです。複数の出力をもつニューラル ネットワークの場合は、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
プロパティの両方を指定する場合、それらは一致していなければなりません。
詳細については、Deep Learning Data Formatsを参照してください。
数値配列または 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
オブジェクトを使用します。詳細については、Deep Learning Data Formatsを参照してください。
データストア
データストアは、イメージとターゲットのバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに拡張や変換を適用したい場合に最適です。
イメージ データの場合、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
オブジェクトはイメージ ファイルを事前取得しないため、通常、速度が大幅に低下します。
transform
関数と combine
関数を使用することで、他の組み込みのデータストアを使用して深層学習ニューラル ネットワークをテストできます。これらの関数は、データストアから読み取られたデータを trainnet
関数に必要なレイアウトに変換できます。データストア出力に必要なレイアウトは、ニューラル ネットワーク アーキテクチャによって異なります。詳細については、データストアのカスタマイズを参照してください。
minibatchqueue
オブジェクト (R2024a 以降)
ソフトウェアがミニバッチを処理および変換する方法をより細かく制御するには、予測子とターゲットを返す minibatchqueue
オブジェクトとしてデータを指定できます。
データを minibatchqueue
オブジェクトとして指定すると、trainnet
関数はオブジェクトの MiniBatchSize
プロパティを無視し、代わりに MiniBatchSize
学習オプションを使用します。
ターゲットを指定するには、minibatchqueue
は numInputs+numOutputs
個の出力をもたなければなりません。ここで、numInputs
と numOutputs
は、それぞれネットワークの入力と出力の数です。最初の numInputs
個の出力は、ネットワーク入力に対応します。最後の numOutput
個の出力は、ネットワーク出力に対応します。ニューラル ネットワークの InputNames
プロパティと OutputNames
プロパティは、それぞれ入力データと出力データの順序を指定します。
メモ
この引数は、複素数値の予測子とターゲットをサポートします。
sequences
— シーケンス データまたは時系列データ
数値配列の cell 配列 | dlarray
オブジェクトの cell 配列 | 数値配列 | dlarray
オブジェクト | データストア | minibatchqueue
オブジェクト (R2024a 以降)
シーケンス データまたは時系列データ。数値配列、数値配列の 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
プロパティの両方を指定する場合、それらは一致していなければなりません。
詳細については、Deep Learning Data Formatsを参照してください。
数値配列、dlarray
オブジェクト、または cell 配列
メモリに収まり、カスタム変換などの追加処理を必要としないデータの場合、単一のシーケンスを数値配列または dlarray
オブジェクトとして指定するか、シーケンスのデータ セットを数値配列または dlarray
オブジェクトから成る cell 配列として指定できます。シーケンスを数値配列、cell 配列、または dlarray
オブジェクトとして指定した場合、targets
引数も指定しなければなりません。
cell 配列入力の場合、cell 配列は数値配列または dlarray
オブジェクトから成る N 行 1 列の cell 配列でなければなりません。ここで、N は観測値の数です。シーケンスを表す数値配列または dlarray
オブジェクトのサイズと形状は、シーケンス データの種類によって異なり、InputDataFormats
学習オプションと一致していなければなりません。
次の表に、シーケンス入力層をもつニューラル ネットワークが必要とするデータ レイアウトを示します。
データ | レイアウト |
---|---|
ベクトル シーケンス | 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 は、それぞれ 3 次元イメージの高さ、幅、深さ、およびチャネル数に対応します。s はシーケンス長です。 |
異なるレイアウトのデータの場合は、InputDataFormats
学習オプションを使用してデータのレイアウトが異なることを示すか、形式を整えた dlarray
オブジェクトを使用します。詳細については、Deep Learning Data Formatsを参照してください。
データストア
データストアは、シーケンスとターゲットのバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに変換を適用したい場合に最適です。
シーケンス データおよび時系列データの場合、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
プロパティは、それぞれ入力データと出力データの順序を指定します。
メモ
この引数は、複素数値の予測子とターゲットをサポートします。
features
— 特徴または表形式のデータ
数値配列 | dlarray
オブジェクト | table (R2024a 以降) | データストア | minibatchqueue
オブジェクト (R2024a 以降)
特徴または表形式のデータ。数値配列、データストア、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
プロパティの両方を指定する場合、それらは一致していなければなりません。
詳細については、Deep Learning Data Formatsを参照してください。
数値配列または dlarray
オブジェクト
メモリに収まり、なおかつカスタム変換などの追加の処理を必要としない特徴データの場合、特徴データを数値配列として指定できます。特徴データを数値配列として指定した場合、targets
引数も指定しなければなりません。
数値配列と形式を整えていない dlarray
オブジェクトのレイアウトは、InputDataFormats
学習オプションと一致していなければなりません。特徴入力をもつほとんどのネットワークでは、N 行 numFeatures
列の配列として指定した入力データが必要です。ここで、N は観測値の数、numFeatures
は入力データの特徴の数です。
table
メモリに収まり、カスタム変換などの追加処理を必要としない特徴データの場合、特徴データを 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
プロパティは、それぞれ入力データと出力データの順序を指定します。
メモ
この引数は、複素数値の予測子とターゲットをサポートします。
data
— 汎用データまたはデータ型の組み合わせ
数値配列 | dlarray
オブジェクト | データストア | minibatchqueue
オブジェクト (R2024a 以降)
汎用データまたはデータ型の組み合わせ。数値配列、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
プロパティの両方を指定する場合、それらは一致していなければなりません。
詳細については、Deep Learning Data Formatsを参照してください。
数値または dlarray
オブジェクト
メモリに収まり、カスタム変換などの追加処理を必要としないデータの場合は、特徴データを数値配列として指定できます。特徴データを数値配列として指定した場合、targets
引数も指定しなければなりません。
inputLayer
オブジェクトをもつニューラル ネットワークの場合、必要とされる入力データのレイアウトは、層の InputFormat
プロパティで指定します。
異なるレイアウトのデータの場合は、InputDataFormats
学習オプションを使用してデータのレイアウトが異なることを示すか、形式を整えた dlarray
オブジェクトを使用します。詳細については、Deep Learning Data Formatsを参照してください。
データストア
データストアは、データとターゲットのバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに変換を適用したい場合に最適です。
汎用データまたはデータ型の組み合わせの場合、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
プロパティは、それぞれ入力データと出力データの順序を指定します。
メモ
この引数は、複素数値の予測子とターゲットをサポートします。
targets
— 学習ターゲット
categorical 配列 | 数値配列 | シーケンスの cell 配列
学習ターゲット。categorical 配列、数値配列、またはシーケンスの cell 配列として指定します。
複数の出力をもつネットワークのターゲットを指定するには、images
、sequences
、features
、または data
の各引数を使用してターゲットを指定します。
ヒント
損失関数には、特定のレイアウトをもつデータが必要です。たとえば、sequence-to-vector 回帰ネットワークの場合、損失関数は通常、1 行 R 列のベクトルとして表されたターゲット ベクトルを必要とします。ここで、R は応答の数です。
ほとんどのデータストアと関数は、損失関数で必要とされるレイアウトでデータを出力します。ターゲット データが損失関数で必要とされるレイアウトと異なる場合、ターゲットのレイアウトが異なることを示すために、TargetDataFormats
学習オプションを使用するか、データを minibatchqueue
オブジェクトとして指定して TargetDataFormats
プロパティを指定するか、形式を整えた dlarray
オブジェクトとしてターゲット データを指定します。通常、データ形式を指定することは、ターゲット データを前処理するよりも簡単です。TargetDataFormats
学習オプションと TargetDataFormats
minibatchqueue
プロパティの両方を指定する場合、それらは一致していなければなりません。
詳細については、Deep Learning Data Formatsを参照してください。
必要とされるターゲットのレイアウトは、損失関数とタスクの種類によって異なります。ここにリストされているターゲットはサブセットのみです。損失関数は、追加の次元をもつターゲットなど、異なるレイアウトをもつ追加のターゲットをサポートする場合があります。カスタム損失関数の場合、ソフトウェアはネットワーク出力データの形式情報を使用してターゲット データの種類を判定し、次の表の対応するレイアウトを適用します。
損失関数 | ターゲット | ターゲットのレイアウト |
---|---|---|
"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
オブジェクトを使用します。詳細については、Deep Learning Data Formatsを参照してください。
ヒント
ターゲットの正規化は、回帰用のニューラル ネットワークの学習の安定化と高速化に役立つことがよくあります。詳細については、回帰用の畳み込みニューラル ネットワークの学習を参照してください。
net
— ニューラル ネットワーク アーキテクチャ
dlnetwork
オブジェクト | 層配列
ニューラル ネットワーク アーキテクチャ。dlnetwork
オブジェクトまたは層配列として指定します。
組み込みのニューラル ネットワーク層の一覧については、深層学習層の一覧を参照してください。
lossFcn
— 損失関数
"crossentropy"
| "index-crossentropy"
(R2024b 以降) | "binary-crossentropy"
| "mse"
| "mean-squared-error"
| "l2loss"
| "mae"
| "mean-absolute-error"
| "l1loss"
| "huber"
| 関数ハンドル | deep.DifferentiableFunction
オブジェクト (R2024a 以降)
学習に使用する損失関数。次のいずれかの値として指定します。
"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を参照してください。
options
— 学習オプション
TrainingOptionsSGDM
| TrainingOptionsRMSProp
| TrainingOptionsADAM
| TrainingOptionsLBFGS
| TrainingOptionsLM
学習オプション。trainingOptions
関数によって返される TrainingOptionsSGDM
オブジェクト、TrainingOptionsRMSProp
オブジェクト、TrainingOptionsADAM
オブジェクト、TrainingOptionsLBFGS
オブジェクト、または TrainingOptionsLM
オブジェクトとして指定します。
出力引数
netTrained
— 学習済みネットワーク
dlnetwork
オブジェクト
学習済みネットワーク。dlnetwork
オブジェクトとして返されます。
info
— 学習情報
TrainingInfo
オブジェクト
学習情報。次のプロパティをもつ 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
オブジェクトを使用しなければなりません。
詳細については、Deep Learning Data Formatsを参照してください。
ほとんどのネットワークでは、次のデータ レイアウトの予測子が必要です。
イメージ入力
データ | 予測子のレイアウト |
---|---|
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 は、それぞれシーケンスの高さ、幅、深さ、チャネル数、およびタイム ステップ数です。 |
詳細については、Deep Learning Data Formatsを参照してください。
拡張機能
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は、GPU による高速化を完全にサポートします。
既定では、trainnet
関数は利用可能な GPU がある場合にそれを使用します。trainnet
関数が使用するハードウェアは、trainingOptions
関数を使用して ExecutionEnvironment
学習オプションを設定することで指定できます。
詳細については、Scale Up Deep Learning in Parallel, on GPUs, and in the Cloudを参照してください。
バージョン履歴
R2023b で導入R2024b: インデックス クロスエントロピー損失を使用した学習
インデックス クロスエントロピー損失は、"スパース クロスエントロピー損失" とも呼ばれ、標準的なクロスエントロピー損失アルゴリズムよりもメモリ効率と計算効率に優れた代替手段です。ターゲットを one-hot 符号化ベクトルに変換する必要のある "crossentropy"
損失関数とは異なり、"index-crossentropy"
関数は、categorical ターゲットの整数値に対して直接演算を行います。
インデックス クロスエントロピー損失の使用は、多数のクラスにわたる予測など、one-hot 符号化されたデータによって不要なメモリ オーバーヘッドが発生する場合に適しています。
インデックス クロスエントロピー損失を指定するには、lossFcn
引数を "index-crossentropy"
として指定します。
R2024a: trainNetwork
よりも推奨
trainnet
関数には次の利点があるため、trainNetwork
関数よりも推奨されます。
trainnet
はdlnetwork
オブジェクトをサポートしています。このオブジェクトは、ユーザーが作成したり外部のプラットフォームからインポートしたりできる、さまざまなネットワーク アーキテクチャをサポートしています。trainnet
を使用すると、損失関数を簡単に指定できます。組み込みの損失関数を選択するか、カスタム損失関数を指定できます。trainnet
はdlnetwork
オブジェクトを出力します。このオブジェクトは、ネットワークの構築、予測、組み込み学習、可視化、圧縮、検証、およびカスタム学習ループをサポートする統合されたデータ型です。trainnet
は、通常、trainNetwork
よりも高速です。
R2024a: minibatchqueue
オブジェクトとしてのデータの指定
メモリ内の特徴データを minibatchqueue
オブジェクトとして指定します。
R2024a: table としての特徴データの指定
features
引数を使用して、メモリ内の特徴データを table として指定します。
R2024a: deep.DifferentiableFunction
オブジェクトとしての損失関数の指定
損失関数を deep.DifferentiableFunction
オブジェクトとして指定します。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)