Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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 つの入力として指定することもできます。

net = trainNetwork(images,layers,options) は、images で指定したイメージと応答、および options で定義した学習オプションを使用して、layers で指定したイメージ分類タスクとイメージ回帰タスクのためのニューラル ネットワークに学習させます。

net = trainNetwork(images,responses,layers,options) は、images で指定したイメージ、および responses で指定した応答を使用して学習を行います。

net = trainNetwork(sequences,layers,options) は、sequences で指定したシーケンスと応答を使用して、シーケンス分類タスク、時系列分類タスク、および回帰タスクのためのニューラル ネットワーク (LSTM ニューラル ネットワークや GRU ニューラル ネットワークなど) に学習させます。

net = trainNetwork(sequences,responses,layers,options) は、sequences で指定したシーケンス、および responses で指定した応答を使用して学習を行います。

net = trainNetwork(features,layers,options) は、features で指定した特徴データと応答を使用して、特徴分類タスクまたは回帰タスクのためのニューラル ネットワーク (多層パーセプトロン (MLP) ニューラル ネットワークなど) に学習させます。

net = trainNetwork(features,responses,layers,options) は、features で指定した特徴データ、および responses で指定した応答を使用して学習を行います。

net = trainNetwork(mixed,layers,options) は、mixed で指定されたデータと応答を使用して、混在するデータ型から成る複数の入力でニューラル ネットワークに学習させます。

[net,info] = trainNetwork(___) は、前述の構文のいずれかを使用して学習に関する情報も返します。

すべて折りたたむ

データを 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

Figure contains 20 axes objects. Axes object 1 contains an object of type image. Axes object 2 contains an object of type image. Axes object 3 contains an object of type image. Axes object 4 contains an object of type image. Axes object 5 contains an object of type image. Axes object 6 contains an object of type image. Axes object 7 contains an object of type image. Axes object 8 contains an object of type image. Axes object 9 contains an object of type image. Axes object 10 contains an object of type image. Axes object 11 contains an object of type image. Axes object 12 contains an object of type image. Axes object 13 contains an object of type image. Axes object 14 contains an object of type image. Axes object 15 contains an object of type image. Axes object 16 contains an object of type image. Axes object 17 contains an object of type image. Axes object 18 contains an object of type image. Axes object 19 contains an object of type image. Axes object 20 contains an object of type image.

データストアを分割して、学習セットの各カテゴリに 750 個のイメージが含まれ、テスト セットに各ラベルの残りのイメージが含まれるようにします。

numTrainingFiles = 750;
[imdsTrain,imdsTest] = splitEachLabel(imds,numTrainingFiles,'randomize');

splitEachLabel は、digitData 内のイメージ ファイルを 2 つの新しいデータストア imdsTrainimdsTest に分割します。

畳み込みニューラル ネットワーク アーキテクチャを定義します。

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);

Figure Training Progress (29-Aug-2023 21:23:47) contains 2 axes objects and another object of type uigridlayout. Axes object 1 with xlabel Iteration, ylabel Loss contains 6 objects of type patch, text, line. Axes object 2 with xlabel Iteration, ylabel Accuracy (%) contains 6 objects of type patch, text, line.

ネットワークの学習に使用されなかったテスト セットについて学習済みネットワークを実行し、イメージのラベル (数字) を予測します。

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

Figure contains 20 axes objects. Axes object 1 contains an object of type image. Axes object 2 contains an object of type image. Axes object 3 contains an object of type image. Axes object 4 contains an object of type image. Axes object 5 contains an object of type image. Axes object 6 contains an object of type image. Axes object 7 contains an object of type image. Axes object 8 contains an object of type image. Axes object 9 contains an object of type image. Axes object 10 contains an object of type image. Axes object 11 contains an object of type image. Axes object 12 contains an object of type image. Axes object 13 contains an object of type image. Axes object 14 contains an object of type image. Axes object 15 contains an object of type image. Axes object 16 contains an object of type image. Axes object 17 contains an object of type image. Axes object 18 contains an object of type image. Axes object 19 contains an object of type image. Axes object 20 contains an object of type image.

畳み込みニューラル ネットワーク アーキテクチャを指定します。回帰問題の場合、ネットワークの最後に回帰層を含めます。

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);

Figure Training Progress (29-Aug-2023 21:17:40) contains 2 axes objects and another object of type uigridlayout. Axes object 1 with xlabel Iteration, ylabel Loss contains 7 objects of type patch, text, line. Axes object 2 with xlabel Iteration, ylabel RMSE contains 7 objects of type patch, text, line.

テスト データの予測精度を評価することによって、ネットワーク性能をテストします。predict を使用して、検証イメージの回転角度を予測します。

[XTest,~,YTest] = digitTest4DArrayData;
YPred = predict(net,XTest);

回転角度の予測値と実際の値の平方根平均二乗誤差 (RMSE) を計算することによって、モデルの性能を評価します。

rmse = sqrt(mean((YTest - YPred).^2))
rmse = single
    6.0269

sequence-to-label 分類について深層学習 LSTM ネットワークに学習をさせます。

サンプル データを WaveformData.mat から読み込みます。データは、numObservations 行 1 列のシーケンスの cell 配列です。ここで、numObservations はシーケンスの数です。各シーケンスは numChannels-numTimeSteps 列の数値配列です。ここで、numChannels はシーケンスのチャネル数、numTimeSteps はシーケンスのタイム ステップ数です。

load WaveformData

シーケンスの一部をプロットで可視化します。

numChannels = size(data{1},1);

idx = [3 4 5 12];
figure
tiledlayout(2,2)
for i = 1:4
    nexttile
    stackedplot(data{idx(i)}',DisplayLabels="Channel "+string(1:numChannels))
    
    xlabel("Time Step")
    title("Class: " + string(labels(idx(i))))
end

テスト用のデータを確保します。データの 90% から成る学習セットとデータの残りの 10% から成るテスト セットにデータを分割します。データを分割するには、この例にサポート ファイルとして添付されている関数 trainingPartitions を使用します。このファイルにアクセスするには、例をライブ スクリプトとして開きます。

numObservations = numel(data);
[idxTrain,idxTest] = trainingPartitions(numObservations, [0.9 0.1]);
XTrain = data(idxTrain);
TTrain = labels(idxTrain);

XTest = data(idxTest);
TTest = labels(idxTest);

LSTM ネットワーク アーキテクチャを定義します。入力サイズを入力データのチャネルの数として指定します。120 個の隠れユニットを含み、シーケンスの最後の要素を出力するように LSTM 層を指定します。最後に、クラス数と一致する出力サイズをもつ全結合層を含め、その後にソフトマックス層と分類層を含めます。

numHiddenUnits = 120;
numClasses = numel(categories(TTrain));

layers = [ ...
    sequenceInputLayer(numChannels)
    lstmLayer(numHiddenUnits,OutputMode="last")
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer]
layers = 
  5×1 Layer array with layers:

     1   ''   Sequence Input          Sequence input with 3 dimensions
     2   ''   LSTM                    LSTM with 120 hidden units
     3   ''   Fully Connected         4 fully connected layer
     4   ''   Softmax                 softmax
     5   ''   Classification Output   crossentropyex

学習オプションを指定します。学習率 0.01、勾配しきい値 1 で Adam ソルバーを使用して学習させます。エポックの最大数を 150 に設定し、すべてのエポックでデータをシャッフルします。既定では、ソフトウェアは GPU が利用できる場合に GPU で学習を行います。GPU を使用するには、Parallel Computing Toolbox とサポートされている GPU デバイスが必要です。サポートされているデバイスについては、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。

options = trainingOptions("adam", ...
    MaxEpochs=150, ...
    InitialLearnRate=0.01,...
    Shuffle="every-epoch", ...
    GradientThreshold=1, ...
    Verbose=false, ...
    Plots="training-progress");

学習オプションを指定して LSTM ネットワークに学習させます。

net = trainNetwork(XTrain,TTrain,layers,options);

テスト データを分類します。学習に使用されるサイズと同じミニバッチ サイズを指定します。

YTest = classify(net,XTest);

予測の分類精度を計算します。

acc = mean(YTest == TTest)
acc = 0.8400

分類結果を混同チャートで表示します。

figure
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 つのカテゴリカル特徴量があります。

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);

Figure Training Progress (29-Aug-2023 21:23:17) contains 2 axes objects and another object of type uigridlayout. Axes object 1 with xlabel Iteration, ylabel Loss contains 7 objects of type patch, text, line. Axes object 2 with xlabel Iteration, ylabel Accuracy (%) contains 7 objects of type patch, text, line.

学習済みネットワークを使用してテスト データのラベルを予測し、精度を計算します。精度は、ネットワークが正しく予測するラベルの比率です。

YPred = classify(net,tblTest,'MiniBatchSize',miniBatchSize);
YTest = tblTest{:,labelName};

accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9688

入力引数

すべて折りたたむ

イメージ データ。次のいずれかとして指定します。

データ型説明使用例
データストアImageDatastoreディスクに保存されたイメージのデータストア。

イメージのサイズがすべて等しい場合に、ディスクに保存されているイメージを使用してイメージ分類ニューラル ネットワークに学習させます。

イメージのサイズが異なる場合は AugmentedImageDatastore オブジェクトを使用します。

ImageDatastore オブジェクトはイメージ分類タスクのみをサポートします。回帰ニューラル ネットワーク用のイメージ データストアを使用するには、関数 transform または combine を使用してそれぞれ変換または結合された、イメージと応答を含むデータストアを作成します。

AugmentedImageDatastoreサイズ変更、回転、反転、せん断、平行移動を含む、ランダムなアフィン幾何学的変換を適用するデータストア。

  • イメージのサイズが異なる場合に、ディスクに保存されているイメージを使用してイメージ分類ニューラル ネットワークに学習させる。

  • イメージ分類ニューラル ネットワークに学習させ、拡張を使用して新しいデータを生成する。

TransformedDatastoreカスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア。

  • イメージ回帰ニューラル ネットワークに学習させる。

  • 複数の入力を使用してニューラル ネットワークに学習させる。

  • trainNetwork でサポートされていない出力をもつデータストアを変換する。

  • データストアの出力にカスタム変換を適用する。

CombinedDatastore2 つ以上の基になるデータストアからデータを読み取るデータストア。

  • イメージ回帰ニューラル ネットワークに学習させる。

  • 複数の入力を使用してニューラル ネットワークに学習させる。

  • 異なるデータ ソースから取得した予測子と応答を結合する。

PixelLabelImageDatastore (Computer Vision Toolbox)イメージおよび対応するピクセル ラベルに対して、同一のアフィン幾何学的変換を適用するデータストア。セマンティック セグメンテーション用のニューラル ネットワークに学習させます。
RandomPatchExtractionDatastore (Image Processing Toolbox)イメージまたはピクセル ラベル イメージからランダム パッチのペアを抽出し、必要に応じてこのペアに同一のアフィン幾何学的変換を適用するデータストア。オブジェクト検出用のニューラル ネットワークに学習させます。
DenoisingImageDatastore (Image Processing Toolbox)ランダムに生成されたガウス ノイズを適用するデータストア。イメージのノイズ除去用のニューラル ネットワークに学習させます。
カスタム ミニバッチ データストアデータのミニバッチを返すカスタム データストア。

他のデータストアでサポートされていない形式のデータを使用してニューラル ネットワークに学習させます。

詳細は、カスタム ミニバッチ データストアの開発を参照してください。

数値配列数値配列として指定されたイメージ。イメージを数値配列として指定した場合、引数 responses も指定しなければなりません。メモリに収まり、なおかつ拡張などの追加の処理を必要としないデータを使用して、ニューラル ネットワークに学習させます。
tabletable として指定されたイメージ。イメージを table として指定した場合、引数 responses を使用して、応答を格納する列を指定することもできます。table に格納されたデータを使用してニューラル ネットワークに学習させます。

複数の入力があるニューラル ネットワークの場合、データストアは TransformedDatastore オブジェクトまたは CombinedDatastore オブジェクトでなければなりません。

ヒント

ビデオ データのようなイメージのシーケンスの場合、入力引数 sequences を使用します。

データストア

データストアは、イメージと応答のミニバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに拡張や変換を適用したい場合に最適です。

以下の一覧に、イメージ データ用の trainNetwork と直接互換性のあるデータストアを示します。

たとえば、関数 imageDatastore を使用してイメージ データストアを作成し、'LabelSource' オプションを 'foldernames' に設定して、イメージが格納されたフォルダーの名前をラベルとして使用することができます。あるいは、イメージ データストアの Labels プロパティを使用して手動でラベルを指定できます。

ヒント

イメージのサイズ変更を含む深層学習用のイメージの前処理を効率的に行うには、augmentedImageDatastore を使用します。ImageDatastore オブジェクトの ReadFcn オプションを使用しないでください。

ImageDatastore を使用すると、事前取得を使用して JPG または PNG イメージ ファイルのバッチ読み取りを行うことができます。ReadFcn オプションをカスタム関数に設定した場合、ImageDatastore は事前取得を行わないため、通常、速度が大幅に低下します。

関数 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]}

多入力層

(numInputs + 1) 列の cell 配列。numInputs はニューラル ネットワーク入力の数です。

最初の numInputs 個の列は各入力の予測子を指定し、最後の列はターゲットを指定します。

入力の順序は、層グラフ layersInputNames プロパティによって指定します。

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 スカラー
イメージ回帰
  • 数値スカラー

  • 数値ベクトル

  • 2 次元イメージを表す 3 次元数値配列

  • 3 次元イメージを表す 4 次元数値配列

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 スカラー
イメージ回帰
  • 数値スカラー

  • スカラー値から成る 2 つ以上の列

  • 2 次元イメージを表す h x w x c の数値配列が格納された 1 行 1 列の cell 配列

  • 3 次元イメージを表す h x w x d x c の数値配列が格納された 1 行 1 列の cell 配列

イメージ入力のあるニューラル ネットワークでは、responses を指定しない場合、関数は既定で、tbl の最初の列を予測子に使用し、後続の列を応答として使用します。

ヒント

  • 予測子または応答に NaN が含まれる場合、学習中、それらがニューラル ネットワーク全体に伝播されます。この場合、一般に学習が収束しなくなります。

  • 回帰タスクでは、応答の正規化が回帰用のニューラル ネットワークの学習の安定化と高速化に役立つことがよくあります。詳細については、回帰用の畳み込みニューラル ネットワークの学習を参照してください。

  • 複素数値のデータをニューラル ネットワークに入力するには、入力層の SplitComplexInputs オプションが 1 でなければなりません。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | table
複素数のサポート: あり

シーケンス データまたは時系列データ。次のいずれかとして指定します。

データ型説明使用例
データストアTransformedDatastoreカスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア。

  • trainNetwork でサポートされていない出力をもつデータストアを変換する。

  • データストアの出力にカスタム変換を適用する。

CombinedDatastore2 つ以上の基になるデータストアからデータを読み取るデータストア。

異なるデータ ソースから取得した予測子と応答を結合する。

カスタム ミニバッチ データストアデータのミニバッチを返すカスタム データストア。

他のデータストアでサポートされていない形式のデータを使用してニューラル ネットワークに学習させます。

詳細は、カスタム ミニバッチ データストアの開発を参照してください。

数値配列または 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 分類

  • カテゴリカル ラベルの 1 行 s 列のシーケンス。ここで、s は対応する予測子シーケンスのシーケンス長です。

  • カテゴリカル ラベルの h x w x s のシーケンス。ここで、h、w、および s は、それぞれ対応する予測子シーケンスの高さ、幅、およびシーケンス長です。

  • カテゴリカル ラベルの h x w x d x s のシーケンス。ここで、h、w、d、および s は、それぞれ対応する予測子シーケンスの高さ、幅、深さ、およびシーケンス長です。

ミニバッチ内の各シーケンスは、同じシーケンス長でなければなりません。

sequence-to-sequence 回帰
  • R 行 s 列の行列。ここで、R は応答の数、s は対応する予測子シーケンスのシーケンス長です。

  • 数値応答の h x w x R x s のシーケンス。ここで、R は応答の数、h、w、および s は、それぞれ対応する予測子シーケンスの高さ、幅、およびシーケンス長です。

  • 数値応答の h x w x d x R x s のシーケンス。ここで、R は応答の数、h、w、d、および s は、それぞれ対応する予測子シーケンスの高さ、幅、深さ、およびシーケンス長です。

ミニバッチ内の各シーケンスは、同じシーケンス長でなければなりません。

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
複素数のサポート: あり

特徴データ。次のいずれかとして指定します。

データ型説明使用例
データストアTransformedDatastoreカスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア。

  • 複数の入力を使用してニューラル ネットワークに学習させる。

  • trainNetwork でサポートされていない出力をもつデータストアを変換する。

  • データストアの出力にカスタム変換を適用する。

CombinedDatastore2 つ以上の基になるデータストアからデータを読み取るデータストア。

  • 複数の入力を使用してニューラル ネットワークに学習させる。

  • 異なるデータ ソースから取得した予測子と応答を結合する。

カスタム ミニバッチ データストアデータのミニバッチを返すカスタム データストア。

他のデータストアでサポートされていない形式のデータを使用してニューラル ネットワークに学習させます。

詳細は、カスタム ミニバッチ データストアの開発を参照してください。

tabletable として指定された特徴データ。特徴を 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]}

多入力層

(numInputs + 1) 列の cell 配列。numInputs はニューラル ネットワーク入力の数です。

最初の numInputs 個の列は各入力の予測子を指定し、最後の列は応答を指定します。

入力の順序は、層グラフ layersInputNames プロパティによって指定します。

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 つ以上の列でスカラーとして指定された特徴。

引数 responses を指定しない場合、予測子は table の最初の numFeatures 列になければなりません。ここで、numFeatures は入力データの特徴の数です。

カテゴリカル ラベル

特徴回帰

スカラー値から成る 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
複素数のサポート: あり

混在するデータまたは応答。次のいずれかとして指定します。

データ型説明使用例
TransformedDatastoreカスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア。

  • 複数の入力を使用してニューラル ネットワークに学習させる。

  • trainNetwork でサポートされていないデータストアの出力を、必要な形式に変換する。

  • データストアの出力にカスタム変換を適用する。

CombinedDatastore2 つ以上の基になるデータストアからデータを読み取るデータストア。

  • 複数の入力を使用してニューラル ネットワークに学習させる。

  • 異なるデータ ソースから取得した予測子と応答を結合する。

カスタム ミニバッチ データストアデータのミニバッチを返すカスタム データストア。

他のデータストアでサポートされていない形式のデータを使用してニューラル ネットワークに学習させます。

詳細は、カスタム ミニバッチ データストアの開発を参照してください。

関数 transform および combine を使用して、深層学習ニューラル ネットワークに学習させるための他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを、trainNetwork に必要な table または cell 配列形式に変換できます。詳細については、深層学習用のデータストアを参照してください。

データストアは、table または cell 配列でデータを返さなければなりません。カスタム ミニバッチ データストアは、table を出力しなければなりません。データストア出力の形式は、ニューラル ネットワーク アーキテクチャによって異なります。

データストア出力出力の例

(numInputs + 1) 列の cell 配列。numInputs はニューラル ネットワーク入力の数です。

最初の numInputs 個の列は各入力の予測子を指定し、最後の列は応答を指定します。

入力の順序は、層グラフ layersInputNames プロパティによって指定します。

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]}

イメージ、シーケンス、および特徴の予測子入力の場合、予測子の形式は、imagessequences、または features のそれぞれの引数の説明に記載されている形式と一致しなければなりません。同様に、応答の形式は、タスクのタイプに対応する引数 imagessequences、または features の説明に記載されている形式と一致しなければなりません。

関数 trainNetwork は、最大で 1 つのシーケンス入力層をもつニューラル ネットワークをサポートします。

複数の入力をもつニューラル ネットワークに学習させる方法を説明する例については、イメージ データおよび特徴データにおけるネットワークの学習を参照してください。

ヒント

  • 数値配列をデータストアに変換するには、ArrayDatastore を使用します。

  • データのタイプが混在するニューラル ネットワークで層を結合する場合、データを結合層 (連結層や追加層など) に渡す前に再構築しなければならない場合があります。データを再構築するには、フラット化層を使用して空間次元をチャネル次元にフラット化するか、再構築および形状変更する FunctionLayer オブジェクトまたはカスタム層を作成します。

応答。

入力データが数値配列または 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 分類タスクでは、sequences をベクトルにすることもできます。この場合、responses は、ラベルの categorical 行ベクトルでなければなりません。

回帰2 次元イメージ回帰
  • N 行 R 列の行列。ここで、N はイメージの数、R は応答の数です。

  • h x w x c x N の数値配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数です。N はイメージの数です。

3 次元イメージ回帰
  • N 行 R 列の行列。ここで、N はイメージの数、R は応答の数です。

  • h x w x d x c x N の数値配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数です。N はイメージの数です。

特徴回帰

N 行 R 列の行列。N は観測値の数、R は応答の数です。

sequence-to-one 回帰N 行 R 列の行列。ここで、N はシーケンスの数、R は応答の数です。
sequence-to-sequence 回帰

数値シーケンスの N 行 1 列の cell 配列。ここで、N はシーケンスの数です。シーケンスは次のいずれかで与えられます。

  • R 行 s 列の行列。ここで、R は応答の数、s は対応する予測子シーケンスのシーケンス長です。

  • h x w x R x s の配列。ここで、h および w はそれぞれ出力の高さおよび幅、R は応答の数、s は対応する予測子シーケンスのシーケンス長です。

  • h x w x d x R x s の配列。ここで、h、w、および d はそれぞれ出力の高さ、幅、および深さ、R は応答の数、s は対応する予測子シーケンスのシーケンス長です。

観測値が 1 つの sequence-to-sequence 回帰タスクでは、sequences を数値配列にすることができます。この場合、responses は、応答の数値配列でなければなりません。

ヒント

応答の正規化は、回帰用のニューラル ネットワークの学習の安定化と高速化に役立つことがよくあります。詳細については、回帰用の畳み込みニューラル ネットワークの学習を参照してください。

ヒント

応答に NaN が含まれていてはなりません。予測子データに NaN が含まれる場合、学習を経由して伝播されます。ただし、ほとんどの場合に学習が収束しなくなります。

ニューラル ネットワーク層。Layer 配列または LayerGraph オブジェクトとして指定します。

すべての層が順に結合されたニューラル ネットワークを作成する場合、Layer 配列を入力引数として使用できます。この場合、返されるニューラル ネットワークは、SeriesNetwork オブジェクトになります。

有向非循環グラフ (DAG) ニューラル ネットワークは複雑な構造を持ち、層は複数の入出力を持てます。DAG ニューラル ネットワークを作成するには、ニューラル ネットワーク アーキテクチャを LayerGraph オブジェクトとして指定して、その層グラフを trainNetwork の入力引数として使用します。

関数 trainNetwork は、最大で 1 つのシーケンス入力層をもつニューラル ネットワークをサポートします。

組み込み層の一覧については、深層学習層の一覧を参照してください。

学習オプション。関数 trainingOptions によって返される TrainingOptionsSGDMTrainingOptionsRMSProp、または TrainingOptionsADAM オブジェクトとして指定します。

出力引数

すべて折りたたむ

学習済みニューラル ネットワーク。SeriesNetwork オブジェクトまたは DAGNetwork オブジェクトとして返されます。

Layer 配列を使用してニューラル ネットワークに学習させる場合、netSeriesNetwork オブジェクトになります。LayerGraph オブジェクトを使用してニューラル ネットワークに学習させる場合、netDAGNetwork オブジェクトになります。

学習に関する情報。構造体として返されます。ここで、各フィールドは、学習の反復ごとに 1 つの要素を持つスカラーまたは数値ベクトルです。

分類タスクでは、info に次のフィールドが含められます。

  • TrainingLoss — 損失関数値

  • TrainingAccuracy — 学習精度

  • ValidationLoss — 損失関数値

  • ValidationAccuracy — 検証精度

  • BaseLearnRate — 学習率

  • FinalValidationLoss — 返されたニューラル ネットワークの検証損失

  • FinalValidationAccuracy — 返されたニューラル ネットワークの検証精度

  • OutputNetworkIteration — 返されたニューラル ネットワークの反復回数

回帰タスクでは、info に次のフィールドが含められます。

  • TrainingLoss — 損失関数値

  • TrainingRMSE — 学習の RMSE 値

  • ValidationLoss — 損失関数値

  • ValidationRMSE — 検証の RMSE 値

  • BaseLearnRate — 学習率

  • FinalValidationLoss — 返されたニューラル ネットワークの検証損失

  • FinalValidationRMSE — 返されたニューラル ネットワークの検証 RMSE

  • OutputNetworkIteration — 返されたニューラル ネットワークの反復回数

options で検証データが指定されている場合、構造体にはフィールド ValidationLossValidationAccuracyValidationRMSEFinalValidationLossFinalValidationAccuracy、および FinalValidationRMSE のみが含まれます。ValidationFrequency 学習オプションは、検証メトリクスの計算が行われる反復を決定します。最終検証メトリクスはスカラーです。構造体の他のフィールドは行ベクトルであり、各要素が学習の反復に対応します。検証メトリクスの計算が行われない反復の場合、構造体の対応する値は NaN になります。

バッチ正規化層が含まれているニューラル ネットワークで、BatchNormalizationStatistics 学習オプションが 'population' の場合、通常、最終検証メトリクスは学習中に評価される検証メトリクスとは異なります。これは、最終的なニューラル ネットワークのバッチ正規化層では、学習中とは異なる処理が実行されるためです。詳細については、batchNormalizationLayer を参照してください。

詳細

すべて折りたたむ

チェックポイント ニューラル ネットワークの保存と学習の再開

Deep Learning Toolbox™ では、学習の際、ニューラル ネットワークを .mat ファイルとして保存できます。この定期的な保存は、ニューラル ネットワークまたはデータ セットが大規模であり、学習に時間がかかる場合に特に便利です。学習が何らかの理由で中断された場合、最後に保存されたチェックポイント ニューラル ネットワークから学習を再開できます。関数 trainnet および trainNetwork にチェックポイント ニューラル ネットワークを保存させる場合は、trainingOptionsCheckpointPath オプションを使用してパス名を指定しなければなりません。指定したパスが存在していない場合、trainingOptions はエラーを返します。

ソフトウェアは、チェックポイント ニューラル ネットワーク ファイルに一意の名前を自動的に割り当てます。例の名前 net_checkpoint__351__2018_04_12__18_09_52.mat で、351 は反復回数、2018_04_12 は日付、18_09_52 はソフトウェアがニューラル ネットワークを保存した時刻を表します。チェックポイント ニューラル ネットワーク ファイルは、ダブルクリックするか、コマンド ラインで読み込みコマンドを使用すると、読み込むことができます。次に例を示します。

load net_checkpoint__351__2018_04_12__18_09_52.mat
また、ニューラル ネットワークの層を trainnet または trainNetwork の入力引数に使用することで、学習を再開できます。次に例を示します。

trainNetwork(XTrain,TTrain,net.Layers,options)
学習オプションと入力データは、チェックポイント ニューラル ネットワークにこれらの情報が含まれていないため、手動で指定しなければなりません。例については、チェックポイント ネットワークからの学習の再開を参照してください。

浮動小数点演算

関数 trainnet または trainNetwork を使用してニューラル ネットワークに学習させる場合や、DAGNetwork オブジェクトおよび SeriesNetwork オブジェクトと共に予測関数または検証関数を使用する場合、ソフトウェアは単精度浮動小数点演算を使用して、これらの計算を実行します。予測および検証のための関数には、predictclassify、および activations があります。CPU と GPU の両方を使用してニューラル ネットワークに学習させる場合、単精度演算が使用されます。

再現性

最高のパフォーマンスを提供するために、GPU を使用した MATLAB® での深層学習は確定的であることを保証しません。ネットワーク アーキテクチャによっては、GPU を使用して 2 つの同一のネットワークに学習させたり、同じネットワークとデータを使用して 2 つの予測を行ったりする場合に、ある条件下で異なる結果が得られることがあります。

拡張機能

バージョン履歴

R2016a で導入

すべて展開する