このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
trainNetwork
深層学習ニューラル ネットワークの学習
構文
説明
分類タスクや回帰タスクでは、関数 trainNetwork
を使用してさまざまなタイプのニューラル ネットワークに学習させることができます。
たとえば、以下の学習が可能です。
イメージ データのための、畳み込みニューラル ネットワーク (ConvNet、CNN) の学習
シーケンス データや時系列データのための、長短期記憶 (LSTM) ニューラル ネットワークやゲート付き回帰ユニット (GRU) ニューラル ネットワークなどの再帰型ニューラル ネットワーク (RNN) の学習
数値特徴量データのための、多層パーセプトロン (MLP) ニューラル ネットワークの学習
1 つの CPU または 1 つの GPU で学習させることができます。イメージ分類やイメージ回帰の場合、複数の GPU やローカルまたはリモートの並列プールを使用して、1 つのニューラル ネットワークを並列で学習させることができます。1 つの GPU または並列で学習させる場合は、Parallel Computing Toolbox™ が必要です。深層学習に GPU を使用するには、サポートされている GPU デバイスもなければなりません。サポートされているデバイスについては、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。実行環境のオプションを含む学習オプションを指定するには、関数 trainingOptions
を使用します。
ニューラル ネットワークに学習させる場合、予測子と応答を 1 つの入力として指定することも、独立した 2 つの入力として指定することもできます。
例
イメージ分類についてのネットワークの学習
データを ImageDatastore
オブジェクトとして読み込みます。
digitDatasetPath = fullfile(matlabroot,'toolbox','nnet', ... 'nndemos','nndatasets','DigitDataset'); imds = imageDatastore(digitDatasetPath, ... 'IncludeSubfolders',true, ... 'LabelSource','foldernames');
データストアには、0 ~ 9 の数字から成る 10,000 個の合成イメージが格納されています。イメージは、さまざまなフォントを使用して作成された数字のイメージにランダム変換を適用して生成されたものです。数字のイメージはそれぞれ 28 x 28 ピクセルです。データストアには、カテゴリごとに同じ数のイメージが含まれます。
データストアのイメージをいくつか表示します。
figure numImages = 10000; perm = randperm(numImages,20); for i = 1:20 subplot(4,5,i); imshow(imds.Files{perm(i)}); drawnow; end
データストアを分割して、学習セットの各カテゴリに 750 個のイメージが含まれ、テスト セットに各ラベルの残りのイメージが含まれるようにします。
numTrainingFiles = 750;
[imdsTrain,imdsTest] = splitEachLabel(imds,numTrainingFiles,'randomize');
splitEachLabel
は、digitData
内のイメージ ファイルを 2 つの新しいデータストア imdsTrain
と imdsTest
に分割します。
畳み込みニューラル ネットワーク アーキテクチャを定義します。
layers = [ ... imageInputLayer([28 28 1]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,'Stride',2) fullyConnectedLayer(10) softmaxLayer classificationLayer];
モーメンタム項付き確率的勾配降下法の既定の設定にオプションを設定します。エポックの最大回数を 20 に設定し、初期学習率 0.0001 で学習を開始します。
options = trainingOptions('sgdm', ... 'MaxEpochs',20,... 'InitialLearnRate',1e-4, ... 'Verbose',false, ... 'Plots','training-progress');
ネットワークに学習をさせます。
net = trainNetwork(imdsTrain,layers,options);
ネットワークの学習に使用されなかったテスト セットについて学習済みネットワークを実行し、イメージのラベル (数字) を予測します。
YPred = classify(net,imdsTest); YTest = imdsTest.Labels;
精度を計算します。精度とは、テスト データ内のイメージの数に対する、classify
による分類に一致するテスト データ内の真のラベルの数の比率です。
accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9412
拡張イメージを使用したネットワークの学習
拡張イメージ データを使用して、畳み込みニューラル ネットワークに学習させます。データ拡張は、ネットワークで過適合が発生したり、学習イメージの正確な詳細が記憶されたりすることを防止するのに役立ちます。
標本データを読み込みます。標本データは、手書き数字の合成イメージで構成されています。
[XTrain,YTrain] = digitTrain4DArrayData;
digitTrain4DArrayData
は、数字の学習セットを 4 次元配列データとして読み込みます。XTrain
は、28 x 28 x 1 x 5000 の配列です。
28 はイメージの高さと幅。
1 はチャネルの数。
5000 は手書き数字の合成イメージの数。
YTrain
は、各観測値のラベルが含まれる categorical ベクトルです。
ネットワークの検証用に 1000 個のイメージを残しておきます。
idx = randperm(size(XTrain,4),1000); XValidation = XTrain(:,:,:,idx); XTrain(:,:,:,idx) = []; YValidation = YTrain(idx); YTrain(idx) = [];
サイズ変更、回転、平行移動、反転など、イメージ拡張の前処理オプションを指定する imageDataAugmenter
オブジェクトを作成します。イメージを、水平方向および垂直方向に最大 3 ピクセルまでのランダムな平行移動をさせたり、最大 20 度までの回転をさせたりします。
imageAugmenter = imageDataAugmenter( ... 'RandRotation',[-20,20], ... 'RandXTranslation',[-3 3], ... 'RandYTranslation',[-3 3])
imageAugmenter = imageDataAugmenter with properties: FillValue: 0 RandXReflection: 0 RandYReflection: 0 RandRotation: [-20 20] RandScale: [1 1] RandXScale: [1 1] RandYScale: [1 1] RandXShear: [0 0] RandYShear: [0 0] RandXTranslation: [-3 3] RandYTranslation: [-3 3]
ネットワーク学習に使用する augmentedImageDatastore
オブジェクトを作成し、イメージ出力サイズを指定します。学習中、データストアはイメージ拡張の実行とイメージのサイズ変更を行います。データストアは、イメージをメモリに保存せずに拡張します。trainNetwork
は、ネットワーク パラメーターを更新した後、その拡張イメージを破棄します。
imageSize = [28 28 1];
augimds = augmentedImageDatastore(imageSize,XTrain,YTrain,'DataAugmentation',imageAugmenter);
畳み込みニューラル ネットワーク アーキテクチャを指定します。
layers = [ imageInputLayer(imageSize) convolution2dLayer(3,8,'Padding','same') batchNormalizationLayer reluLayer maxPooling2dLayer(2,'Stride',2) convolution2dLayer(3,16,'Padding','same') batchNormalizationLayer reluLayer maxPooling2dLayer(2,'Stride',2) convolution2dLayer(3,32,'Padding','same') batchNormalizationLayer reluLayer fullyConnectedLayer(10) softmaxLayer classificationLayer];
モーメンタム項付き確率的勾配降下法の学習オプションを指定します。
opts = trainingOptions('sgdm', ... 'MaxEpochs',15, ... 'Shuffle','every-epoch', ... 'Plots','training-progress', ... 'Verbose',false, ... 'ValidationData',{XValidation,YValidation});
ネットワークに学習をさせます。検証イメージは拡張されないため、検証精度が学習精度より高くなります。
net = trainNetwork(augimds,layers,opts);
イメージ回帰についてのネットワークの学習
標本データを読み込みます。標本データは、手書き数字の合成イメージで構成されています。3 番目の出力には、各イメージに対応する回転角度 (度単位) が含まれています。
digitTrain4DArrayData
を使用して学習イメージを 4 次元配列として読み込みます。出力 XTrain
は 28 x 28 x 1 x 5000 の配列で、それぞれは以下を意味します。
28 はイメージの高さと幅。
1 はチャネルの数。
5000 は手書き数字の合成イメージの数。
YTrain
には回転角度 (度単位) が含まれます。
[XTrain,~,YTrain] = digitTrain4DArrayData;
imshow
を使用して、ランダムに選ばれた 20 個の学習イメージを表示します。
figure numTrainImages = numel(YTrain); idx = randperm(numTrainImages,20); for i = 1:numel(idx) subplot(4,5,i) imshow(XTrain(:,:,:,idx(i))) drawnow; end
畳み込みニューラル ネットワーク アーキテクチャを指定します。回帰問題の場合、ネットワークの最後に回帰層を含めます。
layers = [ ...
imageInputLayer([28 28 1])
convolution2dLayer(12,25)
reluLayer
fullyConnectedLayer(1)
regressionLayer];
ネットワーク学習オプションを指定します。初期学習率を 0.001 に設定します。
options = trainingOptions('sgdm', ... 'InitialLearnRate',0.001, ... 'Verbose',false, ... 'Plots','training-progress');
ネットワークに学習をさせます。
net = trainNetwork(XTrain,YTrain,layers,options);
テスト データの予測精度を評価することによって、ネットワーク性能をテストします。predict
を使用して、検証イメージの回転角度を予測します。
[XTest,~,YTest] = digitTest4DArrayData; YPred = predict(net,XTest);
回転角度の予測値と実際の値の平方根平均二乗誤差 (RMSE) を計算することによって、モデルの性能を評価します。
rmse = sqrt(mean((YTest - YPred).^2))
rmse = single
6.0783
シーケンス分類についてのネットワークの学習
sequence-to-label 分類について深層学習 LSTM ネットワークに学習をさせます。
[1] および [2] に記載のある Japanese Vowels データ セットを読み込みます。XTrain
は、LPC ケプストラム係数に対応する 12 の特徴をもつ可変長の 270 個のシーケンスが含まれる cell 配列です。Y
は、ラベル 1、2、...、9 の categorical ベクトルです。XTrain
のエントリは行列で、行数が 12 (特徴ごとに 1 行) で、列数が可変 (タイム ステップごとに 1 列) です。
[XTrain,YTrain] = japaneseVowelsTrainData;
最初の時系列をプロットで可視化します。各ラインは特徴に対応しています。
figure plot(XTrain{1}') title("Training Observation 1") numFeatures = size(XTrain{1},1); legend("Feature " + string(1:numFeatures),'Location','northeastoutside')
LSTM ネットワーク アーキテクチャを定義します。入力サイズを 12 (入力データの特徴の数) に指定します。100 個の隠れユニットを含み、シーケンスの最後の要素を出力するように LSTM 層を指定します。最後に、サイズが 9 の全結合層を含めることによって 9 個のクラスを指定し、その後にソフトマックス層と分類層を配置します。
inputSize = 12; numHiddenUnits = 100; numClasses = 9; layers = [ ... sequenceInputLayer(inputSize) lstmLayer(numHiddenUnits,'OutputMode','last') fullyConnectedLayer(numClasses) softmaxLayer classificationLayer]
layers = 5x1 Layer array with layers: 1 '' Sequence Input Sequence input with 12 dimensions 2 '' LSTM LSTM with 100 hidden units 3 '' Fully Connected 9 fully connected layer 4 '' Softmax softmax 5 '' Classification Output crossentropyex
学習オプションを指定します。ソルバーを 'adam'
、'GradientThreshold'
を 1 に指定します。ミニバッチ サイズを 27、エポックの最大回数を 70 に設定します。
ミニバッチが小さく、シーケンスが短いため、学習には CPU が適しています。'ExecutionEnvironment'
を 'cpu'
に設定します。GPU が利用できる場合、GPU で学習を行うには、'ExecutionEnvironment'
を 'auto'
(既定値) に設定します。
maxEpochs = 70; miniBatchSize = 27; options = trainingOptions('adam', ... 'ExecutionEnvironment','cpu', ... 'MaxEpochs',maxEpochs, ... 'MiniBatchSize',miniBatchSize, ... 'GradientThreshold',1, ... 'Verbose',false, ... 'Plots','training-progress');
学習オプションを指定して LSTM ネットワークに学習させます。
net = trainNetwork(XTrain,YTrain,layers,options);
テスト セットを読み込み、シーケンスを話者別に分類します。
[XTest,YTest] = japaneseVowelsTestData;
テスト データを分類します。学習に使用されるサイズと同じミニバッチ サイズを指定します。
YPred = classify(net,XTest,'MiniBatchSize',miniBatchSize);
予測の分類精度を計算します。
acc = sum(YPred == YTest)./numel(YTest)
acc = 0.9486
数値特徴量を使用したネットワークの学習
数値特徴量のデータ セット (空間次元や時間次元のない数値データの集合など) がある場合、特徴入力層を使用して深層学習ネットワークに学習させることができます。
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 つのカテゴリカル特徴量があります。
categoricalInputNames = ["SensorCondition" "ShaftCondition"]; tbl = convertvars(tbl,categoricalInputNames,'categorical');
カテゴリカル入力変数をループ処理します。各変数について次を行います。
関数
onehotencode
を使用して、categorical 値を one-hot 符号化ベクトルに変換する。関数
addvars
を使用して、one-hot ベクトルを table に追加する。対応する categorical データが含まれる列の後にベクトルを挿入するように指定する。categorical データが含まれる対応する列を削除する。
for i = 1:numel(categoricalInputNames) name = categoricalInputNames(i); oh = onehotencode(tbl(:,name)); tbl = addvars(tbl,oh,'After',name); tbl(:,name) = []; end
関数 splitvars
を使用して、ベクトルを別々の列に分割します。
tbl = splitvars(tbl);
table の最初の数行を表示します。カテゴリカル予測子が、categorical 値を変数名として複数の列に分割されていることに注意してください。
head(tbl)
SigMean SigMedian SigRMS SigVar SigPeak SigPeak2Peak SigSkewness SigKurtosis SigCrestFactor SigMAD SigRangeCumSum SigCorrDimension SigApproxEntropy SigLyapExponent PeakFreq HighFreqPower EnvPower PeakSpecKurtosis No Sensor Drift Sensor Drift No Shaft Wear Shaft Wear 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' }
次に、データ セットを学習用区画とテスト用区画に分割します。データの 15% をテスト用に残しておきます。
各区画の観測数を求めます。
numObservations = size(tbl,1); numObservationsTrain = floor(0.85*numObservations); numObservationsTest = numObservations - numObservationsTrain;
観測値に対応するランダムなインデックスの配列を作成し、区画サイズを使用して分割します。
idx = randperm(numObservations); idxTrain = idx(1:numObservationsTrain); idxTest = idx(numObservationsTrain+1:end);
インデックスを使用して、データの table を学習用とテスト用の区画に分割します。
tblTrain = tbl(idxTrain,:); tblTest = tbl(idxTest,:);
特徴入力層を使用してネットワークを定義し、特徴の数を指定します。また、z スコア正規化を使用してデータを正規化するように入力層を構成します。
numFeatures = size(tbl,2) - 1; numClasses = numel(classNames); layers = [ featureInputLayer(numFeatures,'Normalization', 'zscore') fullyConnectedLayer(50) batchNormalizationLayer reluLayer fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];
学習オプションを指定します。
miniBatchSize = 16; options = trainingOptions('adam', ... 'MiniBatchSize',miniBatchSize, ... 'Shuffle','every-epoch', ... 'Plots','training-progress', ... 'Verbose',false);
layers
、学習データ、および学習オプションによって定義されたアーキテクチャを使用して、ネットワークに学習させます。
net = trainNetwork(tblTrain,layers,options);
学習済みネットワークを使用してテスト データのラベルを予測し、精度を計算します。精度は、ネットワークが正しく予測するラベルの比率です。
YPred = classify(net,tblTest,'MiniBatchSize',miniBatchSize);
YTest = tblTest{:,labelName};
accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9688
入力引数
images
— イメージ データ
データストア | 数値配列 | table
イメージ データ。次のいずれかとして指定します。
データ型 | 説明 | 使用例 | |
---|---|---|---|
データストア | ImageDatastore | ディスクに保存されたイメージのデータストア。 | イメージのサイズがすべて等しい場合に、ディスクに保存されているイメージを使用してイメージ分類ニューラル ネットワークに学習させます。 イメージのサイズが異なる場合は
|
AugmentedImageDatastore | サイズ変更、回転、反転、せん断、平行移動を含む、ランダムなアフィン幾何学的変換を適用するデータストア。 |
| |
TransformedDatastore | カスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア。 |
| |
CombinedDatastore | 2 つ以上の基になるデータストアからデータを読み取るデータストア。 |
| |
PixelLabelImageDatastore (Computer Vision Toolbox) | イメージおよび対応するピクセル ラベルに対して、同一のアフィン幾何学的変換を適用するデータストア。 | セマンティック セグメンテーション用のニューラル ネットワークに学習させます。 | |
RandomPatchExtractionDatastore (Image Processing Toolbox) | イメージまたはピクセル ラベル イメージからランダム パッチのペアを抽出し、必要に応じてこのペアに同一のアフィン幾何学的変換を適用するデータストア。 | オブジェクト検出用のニューラル ネットワークに学習させます。 | |
DenoisingImageDatastore (Image Processing Toolbox) | ランダムに生成されたガウス ノイズを適用するデータストア。 | イメージのノイズ除去用のニューラル ネットワークに学習させます。 | |
カスタム ミニバッチ データストア | データのミニバッチを返すカスタム データストア。 | 他のデータストアでサポートされていない形式のデータを使用してニューラル ネットワークに学習させます。 詳細は、カスタム ミニバッチ データストアの開発を参照してください。 | |
数値配列 | 数値配列として指定されたイメージ。イメージを数値配列として指定した場合、引数 responses も指定しなければなりません。 | メモリに収まり、なおかつ拡張などの追加の処理を必要としないデータを使用して、ニューラル ネットワークに学習させます。 | |
table | table として指定されたイメージ。イメージを table として指定した場合、引数 responses を使用して、応答を格納する列を指定することもできます。 | table に格納されたデータを使用してニューラル ネットワークに学習させます。 |
複数の入力があるニューラル ネットワークの場合、データストアは TransformedDatastore
オブジェクトまたは CombinedDatastore
オブジェクトでなければなりません。
ヒント
ビデオ データのようなイメージのシーケンスの場合、入力引数 sequences
を使用します。
データストア
データストアは、イメージと応答のミニバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに拡張や変換を適用したい場合に最適です。
以下の一覧に、イメージ データ用の trainNetwork
と直接互換性のあるデータストアを示します。
PixelLabelImageDatastore
(Computer Vision Toolbox)RandomPatchExtractionDatastore
(Image Processing Toolbox)DenoisingImageDatastore
(Image Processing Toolbox)カスタム ミニバッチ データストア。詳細は、カスタム ミニバッチ データストアの開発を参照してください。
たとえば、関数 imageDatastore
を使用してイメージ データストアを作成し、'LabelSource'
オプションを 'foldernames'
に設定して、イメージが格納されたフォルダーの名前をラベルとして使用することができます。あるいは、イメージ データストアの Labels
プロパティを使用して手動でラベルを指定できます。
ImageDatastore
オブジェクトを使用すると、事前取得を使用して JPG または PNG イメージ ファイルのバッチ読み取りを行うことができる点に注意してください。イメージの読み取りにカスタム関数を使用する場合、ImageDatastore
オブジェクトは事前取得を行いません。
ヒント
イメージのサイズ変更を含む深層学習用のイメージの前処理を効率的に行うには、augmentedImageDatastore
を使用します。
関数 imageDatastore
の readFcn
オプションは通常、速度が大幅に低下するため、前処理またはサイズ変更に使用しないでください。
関数 transform
および combine
を使用して、深層学習ニューラル ネットワークに学習させるための他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを、trainNetwork
に必要な形式に変換できます。
複数の入力があるニューラル ネットワークの場合、データストアは TransformedDatastore
オブジェクトまたは CombinedDatastore
オブジェクトでなければなりません。
データストア出力に必要な形式は、ニューラル ネットワーク アーキテクチャによって異なります。
ニューラル ネットワーク アーキテクチャ | データストア出力 | 出力の例 |
---|---|---|
単入力層 | 2 列の table または cell 配列。 最初の列と 2 番目の列は、それぞれ予測子と応答を指定します。 table の要素は、スカラー、行ベクトルであるか、数値配列が格納された 1 行 1 列の cell 配列でなければなりません。 カスタム ミニバッチ データストアは、table を出力しなければなりません。 | 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 |
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]} | ||
多入力層 | ( 最初の 入力の順序は、層グラフ | 2 つの入力と 1 つの出力があるニューラル ネットワークの cell 配列。 data = read(ds) data = 4×3 cell array {224×224×3 double} {128×128×3 double} {[2]} {224×224×3 double} {128×128×3 double} {[2]} {224×224×3 double} {128×128×3 double} {[9]} {224×224×3 double} {128×128×3 double} {[9]} |
予測子の形式は、データのタイプによって異なります。
データ | 形式 |
---|---|
2 次元イメージ | h x w x c の数値配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数です。 |
3 次元イメージ | h x w x d x c の数値配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数です。 |
予測子が table で返される場合、数値スカラーまたは数値行ベクトルが要素に含まれているか、数値配列が格納された 1 行 1 列の cell 配列が要素に含まれていなければなりません。
応答の形式は、タスクのタイプによって異なります。
タスク | 応答の形式 |
---|---|
イメージ分類 | categorical スカラー |
イメージ回帰 |
|
table で返される応答の場合、要素は、categorical スカラー、数値行ベクトルであるか、数値配列が格納された 1 行 1 列の cell 配列でなければなりません。
詳細については、深層学習用のデータストアを参照してください。
数値配列
メモリに収まり、なおかつ拡張などの追加の処理を必要としないデータの場合、イメージのデータ セットを数値配列として指定できます。イメージを数値配列として指定した場合、引数 responses
も指定しなければなりません。
数値配列のサイズと形状は、イメージ データのタイプによって異なります。
データ | 形式 |
---|---|
2 次元イメージ | h x w x c x N の数値配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数です。N はイメージの数です。 |
3 次元イメージ | h x w x d x c x N の数値配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数です。N はイメージの数です。 |
table
データストアまたは数値配列の代わりに、イメージと応答を table で指定することもできます。イメージを table として指定した場合、引数 responses
を使用して、応答を格納する列を指定することもできます。
イメージと応答を table で指定した場合、table の各行は観測値に対応します。
イメージ入力の場合、予測子は table の最初の列に格納し、次のいずれかとして指定しなければなりません。
イメージの絶対ファイル パスまたは相対ファイル パス。文字ベクトルとして指定します。
2 次元イメージを表す h x w x c の数値配列が格納された 1 行 1 列の cell 配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数に対応します。
応答の形式は、タスクのタイプによって異なります。
タスク | 応答の形式 |
---|---|
イメージ分類 | categorical スカラー |
イメージ回帰 |
|
イメージ入力のあるニューラル ネットワークでは、responses
を指定しない場合、関数は既定で、tbl
の最初の列を予測子に使用し、後続の列を応答として使用します。
ヒント
予測子または応答に
NaN
が含まれる場合、学習中、それらがニューラル ネットワーク全体に伝播されます。この場合、一般に学習が収束しなくなります。回帰タスクでは、応答の正規化が回帰用のニューラル ネットワークの学習の安定化と高速化に役立つことがよくあります。詳細については、回帰用の畳み込みニューラル ネットワークの学習を参照してください。
複素数値のデータをニューラル ネットワークに入力するには、入力層の
SplitComplexInputs
オプションが1
でなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| table
複素数のサポート: あり
sequences
— シーケンス データまたは時系列データ
データストア | 数値配列の cell 配列 | 数値配列
シーケンス データまたは時系列データ。次のいずれかとして指定します。
データ型 | 説明 | 使用例 | |
---|---|---|---|
データストア | TransformedDatastore | カスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア。 |
|
CombinedDatastore | 2 つ以上の基になるデータストアからデータを読み取るデータストア。 | 異なるデータ ソースから取得した予測子と応答を結合する。 | |
カスタム ミニバッチ データストア | データのミニバッチを返すカスタム データストア。 | 他のデータストアでサポートされていない形式のデータを使用してニューラル ネットワークに学習させます。 詳細は、カスタム ミニバッチ データストアの開発を参照してください。 | |
数値配列または cell 配列 | 数値配列として指定した、単一のシーケンス。または数値配列の cell 配列として指定した、シーケンスのデータ セット。シーケンスを数値配列または cell 配列として指定した場合、引数 responses も指定しなければなりません。 | メモリに収まり、なおかつカスタム変換などの追加の処理を必要としないデータを使用して、ニューラル ネットワークに学習させます。 |
データストア
データストアは、シーケンスと応答のミニバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに変換を適用したい場合に最適です。
以下の一覧に、シーケンス データ用の trainNetwork
と直接互換性のあるデータストアを示します。
カスタム ミニバッチ データストア。詳細は、カスタム ミニバッチ データストアの開発を参照してください。
関数 transform
および combine
を使用して、深層学習ニューラル ネットワークに学習させるための他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを、trainNetwork
に必要な table または cell 配列形式に変換できます。たとえば、ArrayDatastore
オブジェクトおよび TabularTextDatastore
オブジェクトをそれぞれ使用して、インメモリ配列および CSV ファイルから読み取ったデータの変換と結合を行うことができます。
データストアは、table または cell 配列でデータを返さなければなりません。カスタム ミニバッチ データストアは、table を出力しなければなりません。
データストア出力 | 出力の例 |
---|---|
table | data = read(ds) data = 4×2 table Predictors Response __________________ ________ {12×50 double} 2 {12×50 double} 7 {12×50 double} 9 {12×50 double} 9 |
cell 配列 | data = read(ds) data = 4×2 cell array {12×50 double} {[2]} {12×50 double} {[7]} {12×50 double} {[9]} {12×50 double} {[9]} |
予測子の形式は、データのタイプによって異なります。
データ | 予測子の形式 |
---|---|
ベクトル シーケンス | c 行 s 列の行列。ここで、c はシーケンスの特徴の数、s はシーケンス長です。 |
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 はシーケンス長です。 ミニバッチ内の各シーケンスは、同じシーケンス長でなければなりません。 |
予測子が table で返される場合、数値スカラーまたは数値行ベクトルが要素に含まれているか、数値配列が格納された 1 行 1 列の cell 配列が要素に含まれていなければなりません。
応答の形式は、タスクのタイプによって異なります。
タスク | 応答の形式 |
---|---|
sequence-to-label 分類 | categorical スカラー |
sequence-to-one 回帰 | スカラー |
sequence-to-vector 回帰 | 数値行ベクトル |
sequence-to-sequence 分類 |
ミニバッチ内の各シーケンスは、同じシーケンス長でなければなりません。 |
sequence-to-sequence 回帰 |
ミニバッチ内の各シーケンスは、同じシーケンス長でなければなりません。 |
table で返される応答の場合、要素は、categorical スカラー、数値行ベクトルであるか、数値配列が格納された 1 行 1 列の cell 配列でなければなりません。
詳細については、深層学習用のデータストアを参照してください。
数値配列または cell 配列
メモリに収まり、なおかつカスタム変換などの追加の処理を必要としないデータの場合、単一のシーケンスを数値配列として指定するか、シーケンスのデータ セットを数値配列の cell 配列として指定することができます。シーケンスを cell 配列または数値配列として指定した場合、引数 responses
も指定しなければなりません。
cell 配列入力の場合、cell 配列は、数値配列から成る N 行 1 列の cell 配列でなければなりません。ここで、N は観測値の数です。シーケンスを表す数値配列のサイズと形状は、シーケンス データのタイプによって異なります。
入力 | 説明 |
---|---|
ベクトル シーケンス | c 行 s 列の行列。ここで、c はシーケンスの特徴の数、s はシーケンス長です。 |
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 はシーケンス長です。 |
関数 trainNetwork
は、最大で 1 つのシーケンス入力層をもつニューラル ネットワークをサポートします。
ヒント
予測子または応答に
NaN
が含まれる場合、学習中、それらがニューラル ネットワーク全体に伝播されます。この場合、一般に学習が収束しなくなります。回帰タスクでは、応答の正規化が学習の安定化と高速化に役立つことがよくあります。詳細については、回帰用の畳み込みニューラル ネットワークの学習を参照してください。
複素数値のデータをニューラル ネットワークに入力するには、入力層の
SplitComplexInputs
オプションが1
でなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| cell
複素数のサポート: あり
features
— 特徴データ
データストア | 数値配列 | table
特徴データ。次のいずれかとして指定します。
データ型 | 説明 | 使用例 | |
---|---|---|---|
データストア | TransformedDatastore | カスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア。 |
|
CombinedDatastore | 2 つ以上の基になるデータストアからデータを読み取るデータストア。 |
| |
カスタム ミニバッチ データストア | データのミニバッチを返すカスタム データストア。 | 他のデータストアでサポートされていない形式のデータを使用してニューラル ネットワークに学習させます。 詳細は、カスタム ミニバッチ データストアの開発を参照してください。 | |
table | table として指定された特徴データ。特徴を table として指定した場合、引数 responses を使用して、応答を格納する列を指定することもできます。 | table に格納されたデータを使用してニューラル ネットワークに学習させます。 | |
数値配列 | 数値配列として指定された特徴データ。特徴を数値配列として指定した場合、引数 responses も指定しなければなりません。 | メモリに収まり、なおかつカスタム変換などの追加の処理を必要としないデータを使用して、ニューラル ネットワークに学習させます。 |
データストア
データストアは、特徴データと応答のミニバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに変換を適用したい場合に最適です。
以下の一覧に、特徴データ用の trainNetwork
と直接互換性のあるデータストアを示します。
カスタム ミニバッチ データストア。詳細は、カスタム ミニバッチ データストアの開発を参照してください。
関数 transform
および combine
を使用して、深層学習ニューラル ネットワークに学習させるための他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを、trainNetwork
に必要な table または cell 配列形式に変換できます。詳細については、深層学習用のデータストアを参照してください。
複数の入力があるニューラル ネットワークの場合、データストアは TransformedDatastore
オブジェクトまたは CombinedDatastore
オブジェクトでなければなりません。
データストアは、table または cell 配列でデータを返さなければなりません。カスタム ミニバッチ データストアは、table を出力しなければなりません。データストア出力の形式は、ニューラル ネットワーク アーキテクチャによって異なります。
ニューラル ネットワーク アーキテクチャ | データストア出力 | 出力の例 |
---|---|---|
単入力層 | 2 列の table または cell 配列。 最初の列と 2 番目の列は、それぞれ予測子と応答を指定します。 table の要素は、スカラー、行ベクトルであるか、数値配列が格納された 1 行 1 列の cell 配列でなければなりません。 カスタム ミニバッチ データストアは、table を出力しなければなりません。 | 1 つの入力と 1 つの出力があるニューラル ネットワークの table: data = read(ds) data = 4×2 table Predictors Response __________________ ________ {24×1 double} 2 {24×1 double} 7 {24×1 double} 9 {24×1 double} 9 |
1 つの入力と 1 つの出力があるニューラル ネットワークの cell 配列:
data = read(ds) data = 4×2 cell array {24×1 double} {[2]} {24×1 double} {[7]} {24×1 double} {[9]} {24×1 double} {[9]} | ||
多入力層 | ( 最初の 入力の順序は、層グラフ | 2 つの入力と 1 つの出力があるニューラル ネットワークの cell 配列: data = read(ds) data = 4×3 cell array {24×1 double} {28×1 double} {[2]} {24×1 double} {28×1 double} {[2]} {24×1 double} {28×1 double} {[9]} {24×1 double} {28×1 double} {[9]} |
予測子は、c 行 1 列の列ベクトルでなければなりません。ここで、c は特徴の数です。
応答の形式は、タスクのタイプによって異なります。
タスク | 応答の形式 |
---|---|
分類 | categorical スカラー |
回帰 |
|
詳細については、深層学習用のデータストアを参照してください。
table
メモリに収まり、なおかつカスタム変換などの追加の処理を必要としない特徴データの場合、特徴データと応答を table として指定できます。
table の各行は観測値に対応します。table の列での予測子と応答の配置は、タスクのタイプによって異なります。
タスク | 予測子 | 応答 |
---|---|---|
特徴分類 | 1 つ以上の列でスカラーとして指定された特徴。 引数 | カテゴリカル ラベル |
特徴回帰 | スカラー値から成る 1 つ以上の列 |
特徴入力のある分類ニューラル ネットワークでは、引数 responses
を指定しない場合、関数は既定で、tbl
の最初の (numColumns - 1
) 個の列を予測子に使用し、最後の列をラベルに使用します。ここで、numFeatures
は入力データの特徴の数です。
特徴入力のある回帰ニューラル ネットワークでは、responseNames
引数を指定しない場合、関数は既定で、最初の numFeatures
個の列を予測子に使用し、後続の列を応答に使用します。ここで、numFeatures
は入力データの特徴の数です。
数値配列
メモリに収まり、なおかつカスタム変換などの追加の処理を必要としない特徴データの場合、特徴データを数値配列として指定できます。特徴データを数値配列として指定した場合、引数 responses
も指定しなければなりません。
数値配列は、N 行 numFeatures
列の数値配列でなければなりません。ここで、N は観測値の数、numFeatures
は入力データの特徴の数です。
ヒント
応答の正規化は、回帰用のニューラル ネットワークの学習の安定化と高速化に役立つことがよくあります。詳細については、回帰用の畳み込みニューラル ネットワークの学習を参照してください。
応答に
NaN
が含まれていてはなりません。予測子データにNaN
が含まれる場合、学習を経由して伝播されます。ただし、ほとんどの場合に学習が収束しなくなります。複素数値のデータをニューラル ネットワークに入力するには、入力層の
SplitComplexInputs
オプションが1
でなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| table
複素数のサポート: あり
mixed
— 混在データ
データストア
混在するデータまたは応答。次のいずれかとして指定します。
データ型 | 説明 | 使用例 |
---|---|---|
TransformedDatastore | カスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア。 |
|
CombinedDatastore | 2 つ以上の基になるデータストアからデータを読み取るデータストア。 |
|
カスタム ミニバッチ データストア | データのミニバッチを返すカスタム データストア。 | 他のデータストアでサポートされていない形式のデータを使用してニューラル ネットワークに学習させます。 詳細は、カスタム ミニバッチ データストアの開発を参照してください。 |
関数 transform
および combine
を使用して、深層学習ニューラル ネットワークに学習させるための他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを、trainNetwork
に必要な table または cell 配列形式に変換できます。詳細については、深層学習用のデータストアを参照してください。
データストアは、table または cell 配列でデータを返さなければなりません。カスタム ミニバッチ データストアは、table を出力しなければなりません。データストア出力の形式は、ニューラル ネットワーク アーキテクチャによって異なります。
データストア出力 | 出力の例 |
---|---|
( 最初の 入力の順序は、層グラフ | data = read(ds) data = 4×3 cell array {24×1 double} {28×1 double} {[2]} {24×1 double} {28×1 double} {[2]} {24×1 double} {28×1 double} {[9]} {24×1 double} {28×1 double} {[9]} |
イメージ、シーケンス、および特徴の予測子入力の場合、予測子の形式は、images
、sequences
、または features
のそれぞれの引数の説明に記載されている形式と一致しなければなりません。同様に、応答の形式は、タスクのタイプに対応する引数 images
、sequences
、または features
の説明に記載されている形式と一致しなければなりません。
関数 trainNetwork
は、最大で 1 つのシーケンス入力層をもつニューラル ネットワークをサポートします。
複数の入力をもつニューラル ネットワークに学習させる方法を説明する例については、イメージ データおよび特徴データにおけるネットワークの学習を参照してください。
ヒント
数値配列をデータストアに変換するには、
ArrayDatastore
を使用します。データのタイプが混在するニューラル ネットワークで層を結合する場合、データを結合層 (連結層や追加層など) に渡す前に再構築しなければならない場合があります。データを再構築するには、フラット化層を使用して空間次元をチャネル次元にフラット化するか、再構築および形状変更する
FunctionLayer
オブジェクトまたはカスタム層を作成します。
responses
— 応答
categorical ベクトル | 数値配列 | シーケンスの cell 配列 | 文字ベクトル | 文字ベクトルの cell 配列 | string 配列
応答。
入力データが cell 配列の数値配列の場合、応答を次のいずれかとして指定します。
ラベルの categorical ベクトル
数値応答の数値配列
カテゴリカル シーケンスまたは数値シーケンスの cell 配列
入力データが table の場合、必要に応じて、table で応答を格納する列を次のいずれかとして指定できます。
文字ベクトル
文字ベクトルの cell 配列
string 配列
入力データが数値配列または cell 配列の場合、応答の形式はタスクのタイプによって異なります。
タスク | 形式 | |
---|---|---|
分類 | イメージ分類 | ラベルの N 行 1 列の categorical ベクトル。N は観測値の数です。 |
特徴分類 | ||
sequence-to-label 分類 | ||
sequence-to-sequence 分類 | ラベルのカテゴリカル シーケンスの N 行 1 列の cell 配列。N は観測値の数です。各シーケンスには、対応する予測子シーケンスと同じ数のタイム ステップがなければなりません。 観測値が 1 つの sequence-to-sequence 分類タスクでは、 | |
回帰 | 2 次元イメージ回帰 |
|
3 次元イメージ回帰 |
| |
特徴回帰 | N 行 R 列の行列。N は観測値の数、R は応答の数です。 | |
sequence-to-one 回帰 | N 行 R 列の行列。ここで、N はシーケンスの数、R は応答の数です。 | |
sequence-to-sequence 回帰 | 数値シーケンスの N 行 1 列の cell 配列。ここで、N はシーケンスの数です。シーケンスは次のいずれかで与えられます。
観測値が 1 つの sequence-to-sequence 回帰タスクでは、 |
ヒント
応答の正規化は、回帰用のニューラル ネットワークの学習の安定化と高速化に役立つことがよくあります。詳細については、回帰用の畳み込みニューラル ネットワークの学習を参照してください。
ヒント
応答に NaN
が含まれていてはなりません。予測子データに NaN
が含まれる場合、学習を経由して伝播されます。ただし、ほとんどの場合に学習が収束しなくなります。
layers
— ニューラル ネットワーク層
Layer
配列 | LayerGraph
オブジェクト
ニューラル ネットワーク層。Layer
配列または LayerGraph
オブジェクトとして指定します。
すべての層が順に結合されたニューラル ネットワークを作成する場合、Layer
配列を入力引数として使用できます。この場合、返されるニューラル ネットワークは、SeriesNetwork
オブジェクトになります。
有向非循環グラフ (DAG) ニューラル ネットワークは複雑な構造を持ち、層は複数の入出力を持てます。DAG ニューラル ネットワークを作成するには、ニューラル ネットワーク アーキテクチャを LayerGraph
オブジェクトとして指定して、その層グラフを trainNetwork
の入力引数として使用します。
関数 trainNetwork
は、最大で 1 つのシーケンス入力層をもつニューラル ネットワークをサポートします。
組み込み層の一覧については、深層学習層の一覧を参照してください。
options
— 学習オプション
TrainingOptionsSGDM
| TrainingOptionsRMSProp
| TrainingOptionsADAM
学習オプション。関数 trainingOptions
によって返される TrainingOptionsSGDM
、TrainingOptionsRMSProp
、または TrainingOptionsADAM
オブジェクトとして指定します。
出力引数
net
— 学習済みニューラル ネットワーク
SeriesNetwork
オブジェクト | DAGNetwork
オブジェクト
学習済みニューラル ネットワーク。SeriesNetwork
オブジェクトまたは DAGNetwork
オブジェクトとして返されます。
Layer
配列を使用してニューラル ネットワークに学習させる場合、net
は SeriesNetwork
オブジェクトになります。LayerGraph
オブジェクトを使用してニューラル ネットワークに学習させる場合、net
は DAGNetwork
オブジェクトになります。
info
— 学習に関する情報
構造体
学習に関する情報。構造体として返されます。ここで、各フィールドは、学習の反復ごとに 1 つの要素を持つスカラーまたは数値ベクトルです。
分類タスクでは、info
に次のフィールドが含められます。
TrainingLoss
— 損失関数値TrainingAccuracy
— 学習精度ValidationLoss
— 損失関数値ValidationAccuracy
— 検証精度BaseLearnRate
— 学習率FinalValidationLoss
— 返されたニューラル ネットワークの検証損失FinalValidationAccuracy
— 返されたニューラル ネットワークの検証精度OutputNetworkIteration
— 返されたニューラル ネットワークの反復回数
回帰タスクでは、info
に次のフィールドが含められます。
TrainingLoss
— 損失関数値TrainingRMSE
— 学習の RMSE 値ValidationLoss
— 損失関数値ValidationRMSE
— 検証の RMSE 値BaseLearnRate
— 学習率FinalValidationLoss
— 返されたニューラル ネットワークの検証損失FinalValidationRMSE
— 返されたニューラル ネットワークの検証 RMSEOutputNetworkIteration
— 返されたニューラル ネットワークの反復回数
options
で検証データが指定されている場合、構造体にはフィールド ValidationLoss
、ValidationAccuracy
、ValidationRMSE
、FinalValidationLoss
、FinalValidationAccuracy
、および FinalValidationRMSE
のみが含まれます。ValidationFrequency
学習オプションは、検証メトリクスの計算が行われる反復を決定します。最終検証メトリクスはスカラーです。構造体の他のフィールドは行ベクトルであり、各要素が学習の反復に対応します。検証メトリクスの計算が行われない反復の場合、構造体の対応する値は NaN
になります。
バッチ正規化層が含まれているニューラル ネットワークで、BatchNormalizationStatistics
学習オプションが 'population'
の場合、通常、最終検証メトリクスは学習中に評価される検証メトリクスとは異なります。これは、最終的なニューラル ネットワークのバッチ正規化層では、学習中とは異なる処理が実行されるためです。詳細については、batchNormalizationLayer
を参照してください。
詳細
チェックポイント ニューラル ネットワークの保存と学習の再開
Deep Learning Toolbox™ では、学習の際、ニューラル ネットワークを .mat ファイルとして保存できます。この定期的な保存は、ニューラル ネットワークまたはデータ セットが大規模であり、学習に時間がかかる場合に特に便利です。学習が何らかの理由で中断された場合、最後に保存されたチェックポイント ニューラル ネットワークから学習を再開できます。trainNetwork
にチェックポイント ニューラル ネットワークを保存させる場合は、trainingOptions
の CheckpointPath
オプションを使用してパス名を指定しなければなりません。指定したパスが存在していない場合、trainingOptions
はエラーを返します。
trainNetwork
は、チェックポイント ニューラル ネットワーク ファイルに一意の名前を自動的に割り当てます。例の名前 net_checkpoint__351__2018_04_12__18_09_52.mat
で、351 は反復回数、2018_04_12
は日付、18_09_52
は trainNetwork
がニューラル ネットワークを保存した時刻を表します。チェックポイント ニューラル ネットワーク ファイルは、ダブルクリックするか、コマンド ラインで読み込みコマンドを使用すると、読み込むことができます。次に例を示します。
load net_checkpoint__351__2018_04_12__18_09_52.mat
trainNetwork
の入力引数に使用することで、学習を再開できます。次に例を示します。trainNetwork(XTrain,TTrain,net.Layers,options)
浮動小数点演算
関数 trainNetwork
を使用してニューラル ネットワークに学習させる場合や、DAGNetwork
オブジェクトおよび SeriesNetwork
オブジェクトと共に予測関数または検証関数を使用する場合、ソフトウェアは単精度浮動小数点演算を使用して、これらの計算を実行します。学習、予測、および検証のための関数には、trainNetwork
、predict
、classify
、および activations
が含まれます。CPU と GPU の両方を使用してニューラル ネットワークに学習させる場合、単精度演算が使用されます。
再現性
最高のパフォーマンスを提供するために、GPU を使用した MATLAB® での深層学習は確定的であることを保証しません。ネットワーク アーキテクチャによっては、GPU を使用して 2 つの同一のネットワークに学習させたり、同じネットワークとデータを使用して 2 つの予測を行ったりする場合に、ある条件下で異なる結果が得られることがあります。
参照
[1] Kudo, M., J. Toyama, and M. Shimbo. "Multidimensional Curve Classification Using Passing-Through Regions." Pattern Recognition Letters. Vol. 20, No. 11–13, pp. 1103–1111.
[2] Kudo, M., J. Toyama, and M. Shimbo. Japanese Vowels Data Set. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
拡張機能
自動並列サポート
Parallel Computing Toolbox™ を使用して自動的に並列計算を実行することで、コードを高速化します。
計算を並列実行するには、'ExecutionEnvironment'
オプションを 'multi-gpu'
または 'parallel'
に設定します。
trainingOptions
を使用して 'ExecutionEnvironment'
を設定し、options
を trainNetwork
に指定します。'ExecutionEnvironment'
を設定しない場合、GPU が利用できる場合は trainNetwork
が GPU で実行されます。
詳細は、Scale Up Deep Learning in Parallel, on GPUs, and in the Cloudを参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
メモリ不足エラーを防ぐため、学習データの大規模なセットを GPU に移動しないことを推奨します。GPU でニューラル ネットワークに学習させる場合は、そうする代わりに、
trainingOptions
を使用して'ExecutionEnvironment'
を"auto"
または"gpu"
に設定し、options
をtrainNetwork
に与えてください。入力データが以下の場合、
ExecutionEnvironment
オプションは"auto"
または"gpu"
でなければなりません。gpuArray
gpuArray
オブジェクトを含む cell 配列gpuArray
オブジェクトを含む tablegpuArray
オブジェクトを含む cell 配列を出力するデータストアgpuArray
オブジェクトを含む table を出力するデータストア
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2016a で導入R2022b: SequenceLength
学習オプションを整数として指定した場合、trainNetwork
は、分割を行う前に最も長いシーケンスに合わせてミニバッチをパディングする
R2022b 以降、関数 trainNetwork
を使用してシーケンス データでニューラル ネットワークに学習させるときに、SequenceLength
オプションが整数である場合、各ミニバッチ内で最も長いシーケンスに合わせてシーケンスがパディングされた後、指定したシーケンス長でシーケンスが分割されてミニバッチが作成されます。SequenceLength
によってミニバッチのシーケンスを均等に分割できない場合、最後に分割されたミニバッチの長さは SequenceLength
より短くなります。この動作によって、パディング値しか含まれないタイム ステップでニューラル ネットワークの学習が行われるのを防ぐことができます。
以前のリリースでは、SequenceLength
の倍数に最も近く、かつミニバッチ長以上の長さとなるように、シーケンスのミニバッチをパディングしてから、データが分割されていました。この動作を再現するには、カスタム学習ループを使用し、データのミニバッチを前処理するタイミングでこの動作を実装します。
R2021b: 損失が NaN
になると trainNetwork
が学習を自動的に停止
関数 trainNetwork
を使用してニューラル ネットワークに学習させる際、損失が NaN
になると学習が自動的に停止します。通常、損失値が NaN
になると、ニューラル ネットワークの学習可能パラメーターの値が NaN
になり、その結果、ニューラル ネットワークが学習できなくなったり有効な予測を行えなくなったりする可能性があります。今回の変更によって、学習が完了する前にニューラル ネットワークの問題を特定できるようになりました。
以前のリリースでは、損失が NaN
になってもニューラル ネットワークは学習を続けていました。
R2021a: MAT ファイル パスの table による指定のサポートは削除予定
関数 trainNetwork
用のシーケンス データを指定する際、MAT ファイル パスの table による指定がサポートされていますが、これは将来のリリースで削除される予定です。
メモリに収まらないシーケンスでニューラル ネットワークに学習させる場合は、データストアを使用してください。任意のデータストアを使用してデータを読み取ってから、関数 transform
を使用してデータストアの出力を関数 trainNetwork
が必要とする形式に変換します。たとえば、FileDatastore
オブジェクトまたは TabularTextDatastore
オブジェクトを使用してデータを読み取り、関数 transform
を使用してその出力を変換します。
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)