Main Content

trainNetwork

(非推奨) ニューラル ネットワークの学習

trainNetwork は推奨されません。代わりに関数 trainnet を使用してください。詳細については、バージョン履歴を参照してください。

説明

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(___) は、前述の構文のいずれかを使用して学習に関する情報も返します。

すべて折りたたむ

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)

入力引数

すべて折りたたむ

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

データ型説明使用例
データストア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 が含まれる場合、学習中、それらがニューラル ネットワーク全体に伝播されます。この場合、一般に学習が収束しなくなります。

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

  • この引数は複素数値の予測子をサポートします。関数 trainNetwork を使用して複素数値の予測子をもつネットワークに学習させるには、入力層の SplitComplexInputs オプションが 1 (true) でなければなりません。

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

データ型説明使用例
データストア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 が含まれる場合、学習中、それらがニューラル ネットワーク全体に伝播されます。この場合、一般に学習が収束しなくなります。

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

  • この引数は複素数値の予測子をサポートします。関数 trainNetwork を使用して複素数値の予測子をもつネットワークに学習させるには、入力層の SplitComplexInputs オプションが 1 (true) でなければなりません。

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

データ型説明使用例
データストア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 が含まれる場合、学習を経由して伝播されます。ただし、ほとんどの場合に学習が収束しなくなります。

  • この引数は複素数値の予測子をサポートします。関数 trainNetwork を使用して複素数値の予測子をもつネットワークに学習させるには、入力層の SplitComplexInputs オプションが 1 (true) でなければなりません。

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

データ型説明使用例
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 オブジェクトまたはカスタム層を作成します。

  • この引数は複素数値の予測子をサポートします。関数 trainNetwork を使用して複素数値の予測子をもつネットワークに学習させるには、入力層の SplitComplexInputs オプションが 1 (true) でなければなりません。

応答。

入力データが数値配列または 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 ファイルとして保存できます。この定期的な保存は、ニューラル ネットワークまたはデータ セットが大規模であり、学習に時間がかかる場合に特に便利です。学習が何らかの理由で中断された場合、最後に保存されたチェックポイント ニューラル ネットワークから学習を再開できます。関数 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
また、ニューラル ネットワークの層を trainNetwork の入力引数に使用することで、学習を再開できます。次に例を示します。

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

浮動小数点演算

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

再現性

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

拡張機能

バージョン履歴

R2016a で導入

すべて展開する

R2024a: 非推奨

R2024a 以降、関数 trainNetwork は非推奨となりました。代わりに関数 trainnet を使用してください。

関数 trainNetwork のサポートを削除する予定はありません。ただし、関数 trainnet には次の利点があるため、代わりにこの関数を使うことを推奨します。

  • trainnetdlnetwork オブジェクトをサポートしています。このオブジェクトは、ユーザーが作成したり外部のプラットフォームからインポートしたりできる、さまざまなネットワーク アーキテクチャをサポートしています。

  • trainnet を使用すると、損失関数を簡単に指定できます。組み込みの損失関数を選択するか、カスタム損失関数を指定できます。

  • trainnetdlnetwork オブジェクトを出力します。このオブジェクトは、ネットワークの構築、予測、組み込み学習、可視化、圧縮、検証、およびカスタム学習ループをサポートする統合されたデータ型です。

  • trainnet は、通常、trainNetwork よりも高速です。

関数 trainNetwork の代表的な使用法と、代わりに関数 trainnet を使用するためのコードの更新方法を、次の表に示します。

非推奨推奨
net = trainNetwork(data,layers,options);net = trainnet(data,layers,lossFcn,options);
net = trainNetwork(X,T,layers,options);net = trainnet(X,T,layers,lossFcn,options);

出力層を使用する代わりに、lossFcn を使用して損失関数を指定してください。