Main Content

trainnet

深層学習ニューラル ネットワークの学習

R2023b 以降. 次よりも推奨: trainNetwork.

    説明

    netTrained = trainnet(images,net,lossFcn,options) は、images で指定したイメージとターゲット、および options で定義した学習オプションを使用し、net で指定したニューラル ネットワークにイメージ タスクを学習させます。

    netTrained = trainnet(images,targets,net,lossFcn,options) は、images で指定したイメージと targets で指定したターゲットを使用して学習させます。

    netTrained = trainnet(sequences,net,lossFcn,options) は、sequences で指定したシーケンスとターゲットを使用して、シーケンス タスクまたは時系列タスクのためのニューラル ネットワーク (LSTM や GRU ニューラル ネットワークなど) に学習させます。

    netTrained = trainnet(sequences,targets,net,lossFcn,options) は、sequences で指定したシーケンスと targets で指定したターゲットを使用して学習させます。

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

    netTrained = trainnet(features,targets,net,lossFcn,options) は、features で指定した特徴データと targets で指定したターゲットを使用して学習させます。

    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)

    Figure contains an object of type ConfusionMatrixChart.

    数値特徴量のデータ セット (空間次元や時間次元のない表形式データなど) がある場合、特徴入力層を使用して深層ニューラル ネットワークに学習させることができます。

    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)

    Figure contains an object of type ConfusionMatrixChart.

    分類精度を計算します。この精度は、ネットワークが正しく予測するラベルの割合です。

    accuracy = mean(YTest == TTest)
    accuracy = 
    1
    

    入力引数

    すべて折りたたむ

    データ

    イメージ データ。数値配列、dlarray オブジェクト、データストア、または minibatchqueue オブジェクトとして指定します。

    ヒント

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

    メモリに収まり、データ拡張などの追加処理を必要としないデータがある場合、入力データを数値配列として指定するのが通常最も簡単なオプションです。ディスクに保存されているイメージ ファイルを使用して学習させる場合、またはデータ拡張などの追加処理を適用する場合は、データストアを使用するのが通常最も簡単なオプションです。複数の出力をもつニューラル ネットワークの場合は、TransformedDatastore オブジェクト、CombinedDatastore オブジェクト、または minibatchqueue オブジェクトを使用しなければなりません。

    ヒント

    ニューラル ネットワークには、特定のレイアウトをもつ入力データが必要です。たとえば、イメージ分類ネットワークは通常、h×w×c の数値配列のイメージ表現を必要とします。ここで、hwc はそれぞれイメージの高さ、幅、チャネル数です。ほとんどのニューラル ネットワークでは、必要とされるデータ レイアウトを指定する入力層をもちます。

    ほとんどのデータストアと関数は、ネットワークで必要とされるレイアウトでデータを出力します。データのレイアウトがネットワークで必要とされるレイアウトと異なる場合、データのレイアウトが異なることを示すために、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 の配列。ここで、hw、および c は、それぞれイメージの高さ、幅、およびチャネル数です。N はイメージの数です。

    このレイアウトのデータは、"SSCB" (spatial、spatial、channel、batch) のデータ形式になります。

    3 次元イメージ

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

    このレイアウトのデータは、"SSSCB" (spatial、spatial、spatial、channel、batch) のデータ形式になります。

    異なるレイアウトのデータの場合は、InputDataFormats 学習オプションを使用してデータのレイアウトが異なることを示すか、形式を整えた dlarray オブジェクトを使用します。詳細については、Deep Learning Data Formatsを参照してください。

    データストア

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

    イメージ データの場合、trainnet 関数は次のデータストアをサポートします。

    データストア説明使用例
    ImageDatastore

    ディスクに保存されたイメージのデータストア。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ターゲットを指定するには、データストアは numInputs+numOutputs 個の列をもつ cell 配列または table を出力しなければなりません。ここで、numInputsnumOutputs はそれぞれネットワークの入力と出力の数です。最初の numInputs 個の列は、ネットワーク入力に対応します。最後の numOutput 個の列は、ネットワーク出力に対応します。ニューラル ネットワークの InputNames プロパティと OutputNames プロパティは、それぞれ入力データと出力データの順序を指定します。

    ヒント

    ImageDatastore オブジェクトを使用すると、事前取得を使用して JPG または PNG イメージ ファイルのバッチ読み取りを行うことができます。イメージのサイズ変更を含む深層学習用のイメージの前処理を効率的に行うには、augmentedImageDatastore オブジェクトを使用します。ImageDatastore オブジェクトの ReadFcn プロパティを使用しないでください。ReadFcn プロパティをカスタム関数に設定した場合、ImageDatastore オブジェクトはイメージ ファイルを事前取得しないため、通常、速度が大幅に低下します。

    transform 関数と combine 関数を使用することで、他の組み込みのデータストアを使用して深層学習ニューラル ネットワークをテストできます。これらの関数は、データストアから読み取られたデータを trainnet 関数に必要なレイアウトに変換できます。データストア出力に必要なレイアウトは、ニューラル ネットワーク アーキテクチャによって異なります。詳細については、データストアのカスタマイズを参照してください。

    minibatchqueue オブジェクト (R2024a 以降)

    ソフトウェアがミニバッチを処理および変換する方法をより細かく制御するには、予測子とターゲットを返す minibatchqueue オブジェクトとしてデータを指定できます。

    データを minibatchqueue オブジェクトとして指定すると、trainnet 関数はオブジェクトの MiniBatchSize プロパティを無視し、代わりに MiniBatchSize 学習オプションを使用します。

    ターゲットを指定するには、minibatchqueuenumInputs+numOutputs 個の出力をもたなければなりません。ここで、numInputsnumOutputs は、それぞれネットワークの入力と出力の数です。最初の numInputs 個の出力は、ネットワーク入力に対応します。最後の numOutput 個の出力は、ネットワーク出力に対応します。ニューラル ネットワークの InputNames プロパティと OutputNames プロパティは、それぞれ入力データと出力データの順序を指定します。

    メモ

    この引数は、複素数値の予測子とターゲットをサポートします。

    シーケンス データまたは時系列データ。数値配列、数値配列の cell 配列、dlarray オブジェクト、dlarray オブジェクトの cell 配列、データストア、または minibatchqueue オブジェクトを指定します。

    メモリに収まり、追加の処理を必要としない同じ長さのシーケンスがある場合、入力データを数値配列として指定するのが通常最も簡単なオプションです。メモリに収まり、追加の処理を必要としないさまざまな長さのシーケンスがある場合、入力データを数値配列の cell 配列として指定するのが通常最も簡単なオプションです。ディスクに保存されているシーケンスを使用して学習させる場合、またはカスタム変換などの追加処理を適用する場合は、データストアを使用するのが通常最も簡単なオプションです。複数の入力をもつニューラル ネットワークの場合は、TransformedDatastore オブジェクトまたは CombinedDatastore オブジェクトを使用しなければなりません。

    ヒント

    ニューラル ネットワークには、特定のレイアウトをもつ入力データが必要です。たとえば、ベクトルシーケンス分類ネットワークは通常、tc 列の配列として表されたベクトルシーケンスを必要とします。ここで、tc は、それぞれタイム ステップの数とシーケンスのチャネル数です。ニューラル ネットワークの入力層では、通常、必要とされるデータ レイアウトが指定されています。

    ほとんどのデータストアと関数は、ネットワークで必要とされるレイアウトでデータを出力します。データのレイアウトがネットワークで必要とされるレイアウトと異なる場合、データのレイアウトが異なることを示すために、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 学習オプションと一致していなければなりません。

    次の表に、シーケンス入力層をもつニューラル ネットワークが必要とするデータ レイアウトを示します。

    データレイアウト
    ベクトル シーケンスsc 列の行列。ここで、sc はそれぞれシーケンスのタイム ステップ数とチャネル (特徴) 数です。
    1 次元イメージ シーケンスh x c x s の配列。ここで、h および c はそれぞれイメージの高さおよびチャネル数に対応します。s はシーケンス長です。
    2 次元イメージ シーケンスh x w x c x s の配列。ここで、hw、および c は、それぞれイメージの高さ、幅、およびチャネル数に対応します。s はシーケンス長です。
    3 次元イメージ シーケンスh x w x d x c x s。ここで、hwd、および c は、それぞれ 3 次元イメージの高さ、幅、深さ、およびチャネル数に対応します。s はシーケンス長です。

    異なるレイアウトのデータの場合は、InputDataFormats 学習オプションを使用してデータのレイアウトが異なることを示すか、形式を整えた dlarray オブジェクトを使用します。詳細については、Deep Learning Data Formatsを参照してください。

    データストア

    データストアは、シーケンスとターゲットのバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに変換を適用したい場合に最適です。

    シーケンス データおよび時系列データの場合、trainnet 関数は次のデータストアをサポートします。

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

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

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

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

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

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

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

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

    ターゲットを指定するには、データストアは numInputs+numOutputs 個の列をもつ cell 配列または table を出力しなければなりません。ここで、numInputsnumOutputs はそれぞれネットワークの入力と出力の数です。最初の numInputs 個の列は、ネットワーク入力に対応します。最後の numOutput 個の列は、ネットワーク出力に対応します。ニューラル ネットワークの InputNames プロパティと OutputNames プロパティは、それぞれ入力データと出力データの順序を指定します。

    transform 関数と combine 関数を使用して、他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを trainnet 関数に必要なレイアウトに変換できます。たとえば、ArrayDatastore オブジェクトおよび TabularTextDatastore オブジェクトをそれぞれ使用して、インメモリ配列および CSV ファイルから読み取ったデータの変換と結合を行うことができます。データストア出力に必要なレイアウトは、ニューラル ネットワーク アーキテクチャによって異なります。詳細については、データストアのカスタマイズを参照してください。

    minibatchqueue オブジェクト (R2024a 以降)

    ソフトウェアがミニバッチを処理および変換する方法をより細かく制御するには、予測子とターゲットを返す minibatchqueue オブジェクトとしてデータを指定できます。

    データを minibatchqueue オブジェクトとして指定すると、trainnet 関数はオブジェクトの MiniBatchSize プロパティを無視し、代わりに MiniBatchSize 学習オプションを使用します。

    ターゲットを指定するには、minibatchqueuenumInputs+numOutputs 個の出力をもたなければなりません。ここで、numInputsnumOutputs は、それぞれネットワークの入力と出力の数です。最初の numInputs 個の出力は、ネットワーク入力に対応します。最後の numOutput 個の出力は、ネットワーク出力に対応します。ニューラル ネットワークの InputNames プロパティと OutputNames プロパティは、それぞれ入力データと出力データの順序を指定します。

    メモ

    この引数は、複素数値の予測子とターゲットをサポートします。

    特徴または表形式のデータ。数値配列、データストア、table、または minibatchqueue オブジェクトとして指定します。

    メモリに収まり、追加の処理を必要としないデータがある場合、入力データを数値配列または table として指定するのが通常最も簡単なオプションです。ディスクに保存されている特徴データまたは表形式データを使用して学習させる場合、またはカスタム変換などの追加処理を適用する場合は、データストアを使用するのが通常最も簡単なオプションです。複数の入力をもつニューラル ネットワークの場合は、TransformedDatastore オブジェクトまたは CombinedDatastore オブジェクトを使用しなければなりません。

    ヒント

    ニューラル ネットワークには、特定のレイアウトをもつ入力データが必要です。たとえば、特徴分類ネットワークは通常、1 行 c 列のベクトルとして表された特徴と表形式のデータを必要とします。ここで、c はデータの特徴の数です。ニューラル ネットワークの入力層では、通常、必要とされるデータ レイアウトが指定されています。

    ほとんどのデータストアと関数は、ネットワークで必要とされるレイアウトでデータを出力します。データのレイアウトがネットワークで必要とされるレイアウトと異なる場合、データのレイアウトが異なることを示すために、InputDataFormats 学習オプションを使用するか、データを minibatchqueue オブジェクトとして指定して MiniBatchFormat プロパティを指定するか、形式を整えた dlarray オブジェクトとして入力データを指定します。通常、データ形式を指定することは、入力データを前処理するよりも簡単です。InputDataFormats 学習オプションと MiniBatchFormat minibatchqueue プロパティの両方を指定する場合、それらは一致していなければなりません。

    入力層をもたないニューラル ネットワークの場合、InputDataFormats 学習オプションを使用するか、データを minibatchqueue オブジェクトとして指定して InputDataFormats プロパティを使用するか、形式を整えた dlarray オブジェクトを使用しなければなりません。

    損失関数には、特定のレイアウトをもつデータが必要です。たとえば、sequence-to-vector 回帰ネットワークの場合、損失関数は通常、1 行 R 列のベクトルとして表されたターゲット ベクトルを必要とします。ここで、R は応答の数です。

    ほとんどのデータストアと関数は、損失関数で必要とされるレイアウトでデータを出力します。ターゲット データが損失関数で必要とされるレイアウトと異なる場合、ターゲットのレイアウトが異なることを示すために、TargetDataFormats 学習オプションを使用するか、データを minibatchqueue オブジェクトとして指定して TargetDataFormats プロパティを指定するか、形式を整えた dlarray オブジェクトとしてターゲット データを指定します。通常、データ形式を指定することは、ターゲット データを前処理するよりも簡単です。TargetDataFormats 学習オプションと TargetDataFormats minibatchqueue プロパティの両方を指定する場合、それらは一致していなければなりません。

    詳細については、Deep Learning Data Formatsを参照してください。

    数値配列または dlarray オブジェクト

    メモリに収まり、なおかつカスタム変換などの追加の処理を必要としない特徴データの場合、特徴データを数値配列として指定できます。特徴データを数値配列として指定した場合、targets 引数も指定しなければなりません。

    数値配列と形式を整えていない dlarray オブジェクトのレイアウトは、InputDataFormats 学習オプションと一致していなければなりません。特徴入力をもつほとんどのネットワークでは、NnumFeatures 列の配列として指定した入力データが必要です。ここで、N は観測値の数、numFeatures は入力データの特徴の数です。

    table

    メモリに収まり、カスタム変換などの追加処理を必要としない特徴データの場合、特徴データを table として指定できます。特徴データを table として指定した場合、targets 引数を指定してはなりません。

    特徴データを table として指定するには、numObservations 個の行と numFeatures+1 個の列をもつ table を指定します。ここで、numObservationsnumFeatures は、入力データの観測値とチャネルの数です。trainnet 関数は、最初の numFeatures 個の列を入力特徴として使用し、最後の列をターゲットとして使用します。

    データストア

    データストアは、特徴データとターゲットのバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに変換を適用したい場合に最適です。

    特徴データおよび表形式データの場合、trainnet 関数は次のデータストアをサポートします。

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

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

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

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

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

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

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

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

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

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

    ターゲットを指定するには、データストアは numInputs+numOutputs 個の列をもつ cell 配列または table を出力しなければなりません。ここで、numInputsnumOutputs はそれぞれネットワークの入力と出力の数です。最初の numInputs 個の列は、ネットワーク入力に対応します。最後の numOutput 個の列は、ネットワーク出力に対応します。ニューラル ネットワークの InputNames プロパティと OutputNames プロパティは、それぞれ入力データと出力データの順序を指定します。

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

    minibatchqueue オブジェクト (R2024a 以降)

    ソフトウェアがミニバッチを処理および変換する方法をより細かく制御するには、予測子とターゲットを返す minibatchqueue オブジェクトとしてデータを指定できます。

    データを minibatchqueue オブジェクトとして指定すると、trainnet 関数はオブジェクトの MiniBatchSize プロパティを無視し、代わりに MiniBatchSize 学習オプションを使用します。

    ターゲットを指定するには、minibatchqueuenumInputs+numOutputs 個の出力をもたなければなりません。ここで、numInputsnumOutputs は、それぞれネットワークの入力と出力の数です。最初の numInputs 個の出力は、ネットワーク入力に対応します。最後の numOutput 個の出力は、ネットワーク出力に対応します。ニューラル ネットワークの InputNames プロパティと OutputNames プロパティは、それぞれ入力データと出力データの順序を指定します。

    メモ

    この引数は、複素数値の予測子とターゲットをサポートします。

    汎用データまたはデータ型の組み合わせ。数値配列、dlarray オブジェクト、データストア、または minibatchqueue オブジェクトとして指定します。

    メモリに収まり、追加の処理を必要としないデータがある場合、入力データを数値配列として指定するのが通常最も簡単なオプションです。ディスクに保存されたデータを使用して学習させる場合、または追加の処理を適用する場合は、データストアを使用するのが通常最も簡単なオプションです。複数の入力をもつニューラル ネットワークの場合は、TransformedDatastore オブジェクトまたは CombinedDatastore オブジェクトを使用しなければなりません。

    ヒント

    ニューラル ネットワークには、特定のレイアウトをもつ入力データが必要です。たとえば、ベクトルシーケンス分類ネットワークは通常、tc 列の配列として表されたベクトルシーケンスを必要とします。ここで、tc は、それぞれタイム ステップの数とシーケンスのチャネル数です。ニューラル ネットワークの入力層では、通常、必要とされるデータ レイアウトが指定されています。

    ほとんどのデータストアと関数は、ネットワークで必要とされるレイアウトでデータを出力します。データのレイアウトがネットワークで必要とされるレイアウトと異なる場合、データのレイアウトが異なることを示すために、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カスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア。

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

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

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

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

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

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

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

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

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

    ターゲットを指定するには、データストアは numInputs+numOutputs 個の列をもつ cell 配列または table を出力しなければなりません。ここで、numInputsnumOutputs はそれぞれネットワークの入力と出力の数です。最初の numInputs 個の列は、ネットワーク入力に対応します。最後の numOutput 個の列は、ネットワーク出力に対応します。ニューラル ネットワークの InputNames プロパティと OutputNames プロパティは、それぞれ入力データと出力データの順序を指定します。

    transform 関数と combine 関数を使用して、他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを、trainnet に必要な table または cell 配列形式に変換できます。詳細については、データストアのカスタマイズを参照してください。

    minibatchqueue オブジェクト (R2024a 以降)

    ソフトウェアがミニバッチを処理および変換する方法をより細かく制御するには、予測子とターゲットを返す minibatchqueue オブジェクトとしてデータを指定できます。

    データを minibatchqueue オブジェクトとして指定すると、trainnet 関数はオブジェクトの MiniBatchSize プロパティを無視し、代わりに MiniBatchSize 学習オプションを使用します。

    ターゲットを指定するには、minibatchqueuenumInputs+numOutputs 個の出力をもたなければなりません。ここで、numInputsnumOutputs は、それぞれネットワークの入力と出力の数です。最初の numInputs 個の出力は、ネットワーク入力に対応します。最後の numOutput 個の出力は、ネットワーク出力に対応します。ニューラル ネットワークの InputNames プロパティと OutputNames プロパティは、それぞれ入力データと出力データの順序を指定します。

    メモ

    この引数は、複素数値の予測子とターゲットをサポートします。

    学習ターゲット。categorical 配列、数値配列、またはシーケンスの cell 配列として指定します。

    複数の出力をもつネットワークのターゲットを指定するには、imagessequencesfeatures、または data の各引数を使用してターゲットを指定します。

    ヒント

    損失関数には、特定のレイアウトをもつデータが必要です。たとえば、sequence-to-vector 回帰ネットワークの場合、損失関数は通常、1 行 R 列のベクトルとして表されたターゲット ベクトルを必要とします。ここで、R は応答の数です。

    ほとんどのデータストアと関数は、損失関数で必要とされるレイアウトでデータを出力します。ターゲット データが損失関数で必要とされるレイアウトと異なる場合、ターゲットのレイアウトが異なることを示すために、TargetDataFormats 学習オプションを使用するか、データを minibatchqueue オブジェクトとして指定して TargetDataFormats プロパティを指定するか、形式を整えた dlarray オブジェクトとしてターゲット データを指定します。通常、データ形式を指定することは、ターゲット データを前処理するよりも簡単です。TargetDataFormats 学習オプションと TargetDataFormats minibatchqueue プロパティの両方を指定する場合、それらは一致していなければなりません。

    詳細については、Deep Learning Data Formatsを参照してください。

    必要とされるターゲットのレイアウトは、損失関数とタスクの種類によって異なります。ここにリストされているターゲットはサブセットのみです。損失関数は、追加の次元をもつターゲットなど、異なるレイアウトをもつ追加のターゲットをサポートする場合があります。カスタム損失関数の場合、ソフトウェアはネットワーク出力データの形式情報を使用してターゲット データの種類を判定し、次の表の対応するレイアウトを適用します。

    損失関数ターゲットターゲットのレイアウト
    "crossentropy"カテゴリカル ラベルラベルの N 行 1 列の categorical ベクトル。N は観測値の数です。
    カテゴリカル ラベルのシーケンス

    • tN 列の categorical 配列。ここで、tN はそれぞれタイム ステップと観測値の数です。

    • N 行 1 列のシーケンスの cell 配列。ここで、N は観測値の数です。シーケンスは t 行 1 列の categorical ベクトルです。シーケンスの長さは異なる場合があります。

    "index-crossentropy"カテゴリカル ラベルラベルの N 行 1 列の categorical ベクトル。N は観測値の数です。
    クラス インデックスクラス インデックスの N 行 1 列の数値ベクトル。ここで、N は観測値の数です。
    カテゴリカル ラベルのシーケンス

    • tN 列の categorical 配列。ここで、tN はそれぞれタイム ステップと観測値の数です。

    • N 行 1 列のシーケンスの cell 配列。ここで、N は観測値の数です。シーケンスは t 行 1 列の categorical ベクトルです。シーケンスの長さは異なる場合があります。

    クラス インデックスのシーケンス

    • クラス インデックスの tN 列の行列。ここで、tN はそれぞれタイム ステップと観測値の数です。

    • N 行 1 列のシーケンスの cell 配列。ここで、N は観測値の数です。シーケンスはクラス インデックスの t 行 1 列の数値ベクトルです。シーケンスの長さは異なる場合があります。

    "binary-crossentropy"バイナリ ラベル (単一のラベル)

    N 行 1 列のベクトル。ここで、N は観測値の数です。

    バイナリ ラベル (複数ラベル)

    Nc 列の行列。ここで、Nc はそれぞれ観測値とクラスの数です。

    • "mse"

    • "mean-squared-error"

    • "l2loss"

    • "mae"

    • "mean-absolute-error"

    • "l1loss"

    • "huber"

    数値スカラー

    N 行 1 列のベクトル。ここで、N は観測値の数です。

    数値ベクトル

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

    2 次元イメージ

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

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

    スカラーの数値シーケンス
    • t×1×N の配列。ここで、tN はそれぞれタイム ステップとシーケンスの数です。

    • シーケンスの N 行 1 列の cell 配列。ここで、N はシーケンスの数です。シーケンスは t 行 1 列のベクトルです。ここで、t はタイム ステップの数です。シーケンスの長さは異なる場合があります。

    ベクトルの数値シーケンス

    • t×c×N の配列。ここで、tcN はそれぞれタイム ステップ、チャネル、シーケンスの数です。

    • シーケンスの N 行 1 列の cell 配列。ここで、N はシーケンスの数です。シーケンスは tc 列の行列です。ここで、tc はそれぞれシーケンスのタイム ステップ数とチャネル数です。シーケンスの長さは異なる場合があります。

    1 次元イメージのシーケンス

    • h×c×N×t の配列。ここで、hct はそれぞれシーケンスの高さ、チャネル数、タイム ステップ数であり、N はシーケンスの数です。

    • シーケンスの N 行 1 列の cell 配列。ここで、N はシーケンスの数です。シーケンスは h×c×t の配列です。ここで、htc はそれぞれ高さ、タイム ステップ数、シーケンスのチャネル数です。シーケンスの長さは異なる場合があります。

    2 次元イメージのシーケンス

    • h×w×c×N×t の配列。ここで、hwct はそれぞれシーケンスの高さ、幅、チャネル数、タイム ステップ数であり、N はシーケンスの数です。

    • シーケンスの N 行 1 列の cell 配列。ここで、N はシーケンスの数です。シーケンスは h×w×c×t の配列です。ここで、hwtc はそれぞれシーケンスの高さ、幅、タイム ステップ数、チャネル数です。シーケンスの長さは異なる場合があります。

    3 次元イメージのシーケンス

    • h×w×d×c×N×t の配列。ここで、hwdct は、それぞれシーケンスの高さ、幅、深さ、チャネル数、タイム ステップ数であり、N はシーケンスの数です。

    • シーケンスの N 行 1 列の cell 配列。ここで、N はシーケンスの数です。シーケンスは h×w×d×c×t の配列です。ここで、hwdtc はそれぞれシーケンスの高さ、幅、深さ、タイム ステップ数、チャネル数です。シーケンスの長さは異なる場合があります。

    異なるレイアウトのターゲットの場合は、TargetDataFormats 学習オプションを使用してターゲットのレイアウトが異なることを示すか、形式を整えた dlarray オブジェクトを使用します。詳細については、Deep Learning Data Formatsを参照してください。

    ヒント

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

    学習の詳細

    ニューラル ネットワーク アーキテクチャ。dlnetwork オブジェクトまたは層配列として指定します。

    組み込みのニューラル ネットワーク層の一覧については、深層学習層の一覧を参照してください。

    学習に使用する損失関数。次のいずれかの値として指定します。

    • "crossentropy" — 分類タスクのクロスエントロピー損失。

    • "index-crossentropy" (R2024b 以降) — 分類タスクのインデックス クロスエントロピー損失。categorical クラスが多数ある場合は、このオプションを使用してメモリを節約します。

    • "binary-crossentropy" — バイナリおよびマルチラベル分類タスクのバイナリ クロスエントロピー損失。

    • "mae" / "mean-absolute-error" / "l1loss" — 回帰タスクの平均絶対誤差。

    • "mse" / "mean-squared-error" / "l2loss" — 回帰タスクの平均二乗誤差。

    • "huber" — 回帰タスクの Huber 損失

    • 構文 loss = f(Y1,...,Yn,T1,...,Tm) をもつ関数ハンドル。ここで、Y1,...,Ynn 個のネットワーク予測に対応する dlarray オブジェクトであり、T1,...,Tmm 個のターゲットに対応する dlarray オブジェクトです。

    • deep.DifferentiableFunction オブジェクト (R2024a 以降) — カスタム逆方向関数をもつ関数オブジェクト。

    ヒント

    重み付きクロスエントロピーの場合は、関数ハンドル @(Y,T)crossentropy(Y,T,weights) を使用します。

    カスタム関数の定義の詳細については、Define Custom Deep Learning Operationsを参照してください。

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

    出力引数

    すべて折りたたむ

    学習済みネットワーク。dlnetwork オブジェクトとして返されます。

    学習情報。次のプロパティをもつ TrainingInfo オブジェクトとして返されます。

    • TrainingHistory — 学習の反復に関する情報

    • ValidationHistory — 検証の反復に関する情報

    • OutputNetworkIteration — 学習済みのネットワークに対応する反復

    • StopReason — 学習が停止した理由

    また、info を使用することで、show 関数と close 関数を使用して学習の進行状況プロットを開いたり閉じたりすることもできます。

    詳細

    すべて折りたたむ

    浮動小数点演算

    既定では、関数 trainnet および単精度浮動小数点演算を使用して、ニューラル ネットワークに学習させるための計算が実行されます。関数 trainnet は、単精度の学習可能なパラメーターと状態パラメーターをもつネットワークを返します。

    予測関数か検証関数を単精度の学習可能なパラメーターと状態パラメーターをもつ dlnetwork オブジェクトと組み合わせて使用する場合、単精度浮動小数点演算を使用して計算が実行されます。

    再現性

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

    rng 関数を使用して同じ乱数発生器とシードを設定した場合、次の場合を除き、CPU を使用した学習は再現性をもちます。

    • PreprocessingEnvironment 学習オプションを "background" または "parallel" に設定する。

    • 学習データは、PreprocessingEnvironment プロパティが "background" または "parallel" に設定された minibatchqueue オブジェクトである。

    ヒント

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

    • ほとんどの場合、予測子またはターゲットに NaN 値が含まれていると、それらはネットワークを通じて伝播され、学習は収束に失敗します。

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

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

    アルゴリズム

    すべて折りたたむ

    データストアのカスタマイズ

    ほとんどのデータストアは、ニューラル ネットワークで必要とされるレイアウトでデータを出力します。独自のデータストアを作成する場合、またはデータストアにカスタム変換を適用する場合は、サポートされているレイアウトでデータストアが必ずデータを出力するようにしなければなりません。

    主に次の 2 つの側面があります。

    • データ バッチの構造。データストアは、観測値に対応する行と、入力およびターゲットに対応する列を含む table または cell 配列を出力しなければなりません。

    • 予測子とターゲットのレイアウト。たとえば、予測子とターゲットは、ネットワークと損失関数によってサポートされているレイアウトにとどまっていなければなりません。

    バッチの構造

    ニューラル ネットワークの学習にデータストアを使用する場合、データストアの出力の構造はニューラル ネットワークのアーキテクチャによって異なります。

    ニューラル ネットワーク アーキテクチャデータストア出力cell 配列出力の例table 出力の例
    1 つの入力層と 1 つの出力

    2 列の table または cell 配列。

    最初の列と 2 番目の列は、それぞれ予測子とターゲットを指定します。

    table の要素は、スカラー、行ベクトルであるか、数値配列が格納された 1 行 1 列の cell 配列でなければなりません。

    カスタム ミニバッチ データストアは、table を出力しなければなりません。

    1 つの入力と 1 つの出力があるニューラル ネットワークの cell 配列:

    data = read(ds)
    data =
    
      4×2 cell array
    
        {224×224×3 double}    {[2]}
        {224×224×3 double}    {[7]}
        {224×224×3 double}    {[9]}
        {224×224×3 double}    {[9]}

    1 つの入力と 1 つの出力があるニューラル ネットワークの table:

    data = read(ds)
    data =
    
      4×2 table
    
            Predictors        Response
        __________________    ________
    
        {224×224×3 double}       2    
        {224×224×3 double}       7    
        {224×224×3 double}       9    
        {224×224×3 double}       9  
    

    複数の入力層と複数の出力

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

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

    入力と出力の順序は、ニューラル ネットワークの InputNames プロパティと OutputNames プロパティによってそれぞれ指定されます。

    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 を出力しなければなりません。

    予測子とターゲットのレイアウト

    ニューラル ネットワークと損失関数には、特定のレイアウトの入力データが必要です。たとえば、ベクトルシーケンス分類ネットワークは、通常、tc 列の数値配列として表されたシーケンスを必要とします。ここで、t および c は、それぞれタイム ステップの数とシーケンスのチャネル数です。ニューラル ネットワークの入力層では、通常、必要とされるデータ レイアウトが指定されています。

    ほとんどのデータストアと関数は、ネットワークと損失関数で必要とされるレイアウトでデータを出力します。データのレイアウトがネットワークまたは損失関数で必要とされるレイアウトと異なる場合、InputDataFormats 学習オプションおよび TargetDataFormats 学習オプションを使用するか、形式を整えた dlarray オブジェクトとしてデータを指定し、データのレイアウトが異なることを示します。通常、InputDataFormats 学習オプションおよび TargetDataFormats 学習オプションを調整することは、入力データを前処理するよりも簡単です。

    入力層をもたないニューラル ネットワークの場合、InputDataFormats 学習オプションまたは形式を整えた dlarray オブジェクトを使用しなければなりません。

    詳細については、Deep Learning Data Formatsを参照してください。

    ほとんどのネットワークでは、次のデータ レイアウトの予測子が必要です。

    イメージ入力

    データ予測子のレイアウト
    2 次元イメージ

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

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

    シーケンス入力

    データ予測子のレイアウト
    ベクトル シーケンス

    sc 列の行列。ここで、s はシーケンス長、c はシーケンスの特徴の数です。

    1 次元イメージ シーケンス

    h x c x s の配列。ここで、h および c はそれぞれイメージの高さおよびチャネル数に対応します。s はシーケンス長です。

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

    2 次元イメージ シーケンス

    h x w x c x s の配列。ここで、hw、および c はそれぞれイメージの高さ、幅、およびチャネル数に対応します。s はシーケンス長です。

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

    3 次元イメージ シーケンス

    h x w x d x c x s の配列。ここで、hwd、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数に対応します。s はシーケンス長です。

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

    特徴入力

    データ予測子のレイアウト
    特徴c 行 1 列の列ベクトル。c は特徴の数です。

    ほとんどの損失関数は、ターゲットに応じて次のデータ レイアウトを必要とします。

    ターゲットターゲットのレイアウト
    カテゴリカル ラベルcategorical スカラー。
    カテゴリカル ラベルのシーケンス

    t 行 1 列の categorical ベクトル。ここで、t はタイム ステップ数です。

    バイナリ ラベル (単一のラベル)

    数値スカラー

    バイナリ ラベル (複数ラベル)

    1 行 c 列のベクトル。ここで、c はそれぞれクラスの数です。

    数値スカラー

    数値スカラー

    数値ベクトル

    1 行 R 列のベクトル。ここで、R は応答の数です。

    2 次元イメージ

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

    3 次元イメージ

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

    スカラーの数値シーケンス

    t 行 1 列のベクトル。ここで、t はタイム ステップ数です。

    ベクトルの数値シーケンス

    tc 列の配列。ここで、tc はそれぞれタイム ステップ数とチャネル数です。

    1 次元イメージのシーケンス

    h×c×t の配列。ここで、hc、および t は、それぞれシーケンスの高さ、チャネル数、およびタイム ステップ数です。

    2 次元イメージのシーケンス

    h×w×c×t の配列。ここで、hwc、および t は、それぞれシーケンスの高さ、幅、チャネル数、およびタイム ステップ数です。

    3 次元イメージのシーケンス

    h×w×d×c×t の配列。ここで、hwdc、および t は、それぞれシーケンスの高さ、幅、深さ、チャネル数、およびタイム ステップ数です。

    詳細については、Deep Learning Data Formatsを参照してください。

    拡張機能

    バージョン履歴

    R2023b で導入

    すべて展開する