このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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)
入力引数
images
— イメージ データ
データストア | 数値配列 | table
イメージ データ。次のいずれかとして指定します。
データ型 | 説明 | 使用例 | |
---|---|---|---|
データストア | ImageDatastore | ディスクに保存されたイメージのデータストア。 | イメージのサイズがすべて等しい場合に、ディスクに保存されているイメージを使用してイメージ分類ニューラル ネットワークに学習させます。 イメージのサイズが異なる場合は
|
AugmentedImageDatastore | サイズ変更、回転、反転、せん断、平行移動を含む、ランダムなアフィン幾何学的変換を適用するデータストア。 |
| |
TransformedDatastore | カスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア。 |
| |
CombinedDatastore | 2 つ以上の基になるデータストアからデータを読み取るデータストア。 |
| |
PixelLabelImageDatastore (Computer Vision Toolbox) | イメージおよび対応するピクセル ラベルに対して、同一のアフィン幾何学的変換を適用するデータストア。 | セマンティック セグメンテーション用のニューラル ネットワークに学習させます。 | |
RandomPatchExtractionDatastore (Image Processing Toolbox) | イメージまたはピクセル ラベル イメージからランダム パッチのペアを抽出し、必要に応じてこのペアに同一のアフィン幾何学的変換を適用するデータストア。 | オブジェクト検出用のニューラル ネットワークに学習させます。 | |
DenoisingImageDatastore (Image Processing Toolbox) | ランダムに生成されたガウス ノイズを適用するデータストア。 | イメージのノイズ除去用のニューラル ネットワークに学習させます。 | |
カスタム ミニバッチ データストア | データのミニバッチを返すカスタム データストア。 | 他のデータストアでサポートされていない形式のデータを使用してニューラル ネットワークに学習させます。 詳細は、カスタム ミニバッチ データストアの開発を参照してください。 | |
数値配列 | 数値配列として指定されたイメージ。イメージを数値配列として指定した場合、引数 responses も指定しなければなりません。 | メモリに収まり、なおかつ拡張などの追加の処理を必要としないデータを使用して、ニューラル ネットワークに学習させます。 | |
table | table として指定されたイメージ。イメージを table として指定した場合、引数 responses を使用して、応答を格納する列を指定することもできます。 | table に格納されたデータを使用してニューラル ネットワークに学習させます。 |
複数の入力があるニューラル ネットワークの場合、データストアは TransformedDatastore
オブジェクトまたは CombinedDatastore
オブジェクトでなければなりません。
ヒント
ビデオ データのようなイメージのシーケンスの場合、入力引数 sequences
を使用します。
データストア
データストアは、イメージと応答のミニバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに拡張や変換を適用したい場合に最適です。
以下の一覧に、イメージ データ用の trainNetwork
と直接互換性のあるデータストアを示します。
PixelLabelImageDatastore
(Computer Vision Toolbox)RandomPatchExtractionDatastore
(Image Processing Toolbox)DenoisingImageDatastore
(Image Processing Toolbox)カスタム ミニバッチ データストア。詳細は、カスタム ミニバッチ データストアの開発を参照してください。
たとえば、関数 imageDatastore
を使用してイメージ データストアを作成し、'LabelSource'
オプションを 'foldernames'
に設定して、イメージが格納されたフォルダーの名前をラベルとして使用することができます。あるいは、イメージ データストアの Labels
プロパティを使用して手動でラベルを指定できます。
ヒント
イメージのサイズ変更を含む深層学習用のイメージの前処理を効率的に行うには、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]} | ||
多入力層 | ( 最初の 入力の順序は、層グラフ | 2 つの入力と 1 つの出力があるニューラル ネットワークの cell 配列。 data = read(ds) data = 4×3 cell array {224×224×3 double} {128×128×3 double} {[2]} {224×224×3 double} {128×128×3 double} {[2]} {224×224×3 double} {128×128×3 double} {[9]} {224×224×3 double} {128×128×3 double} {[9]} |
予測子の形式は、データのタイプによって異なります。
データ | 形式 |
---|---|
2 次元イメージ | h x w x c の数値配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数です。 |
3 次元イメージ | h x w x d x c の数値配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数です。 |
予測子が table で返される場合、数値スカラーまたは数値行ベクトルが要素に含まれているか、数値配列が格納された 1 行 1 列の cell 配列が要素に含まれていなければなりません。
応答の形式は、タスクのタイプによって異なります。
タスク | 応答の形式 |
---|---|
イメージ分類 | categorical スカラー |
イメージ回帰 |
|
table で返される応答の場合、要素は、categorical スカラー、数値行ベクトルであるか、数値配列が格納された 1 行 1 列の cell 配列でなければなりません。
詳細については、深層学習用のデータストアを参照してください。
数値配列
メモリに収まり、なおかつ拡張などの追加の処理を必要としないデータの場合、イメージのデータ セットを数値配列として指定できます。イメージを数値配列として指定した場合、引数 responses
も指定しなければなりません。
数値配列のサイズと形状は、イメージ データのタイプによって異なります。
データ | 形式 |
---|---|
2 次元イメージ | h x w x c x N の数値配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数です。N はイメージの数です。 |
3 次元イメージ | h x w x d x c x N の数値配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数です。N はイメージの数です。 |
table
データストアまたは数値配列の代わりに、イメージと応答を table で指定することもできます。イメージを table として指定した場合、引数 responses
を使用して、応答を格納する列を指定することもできます。
イメージと応答を table で指定した場合、table の各行は観測値に対応します。
イメージ入力の場合、予測子は table の最初の列に格納し、次のいずれかとして指定しなければなりません。
イメージの絶対ファイル パスまたは相対ファイル パス。文字ベクトルとして指定します。
2 次元イメージを表す h x w x c の数値配列が格納された 1 行 1 列の cell 配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数に対応します。
応答の形式は、タスクのタイプによって異なります。
タスク | 応答の形式 |
---|---|
イメージ分類 | categorical スカラー |
イメージ回帰 |
|
イメージ入力のあるニューラル ネットワークでは、responses
を指定しない場合、関数は既定で、tbl
の最初の列を予測子に使用し、後続の列を応答として使用します。
ヒント
予測子または応答に
NaN
が含まれる場合、学習中、それらがニューラル ネットワーク全体に伝播されます。この場合、一般に学習が収束しなくなります。回帰タスクでは、応答の正規化が回帰用のニューラル ネットワークの学習の安定化と高速化に役立つことがよくあります。詳細については、回帰用の畳み込みニューラル ネットワークの学習を参照してください。
この引数は複素数値の予測子をサポートします。関数
trainNetwork
を使用して複素数値の予測子をもつネットワークに学習させるには、入力層のSplitComplexInputs
オプションが1
(true
) でなければなりません。
sequences
— シーケンス データまたは時系列データ
データストア | 数値配列の cell 配列 | 数値配列
シーケンス データまたは時系列データ。次のいずれかとして指定します。
データ型 | 説明 | 使用例 | |
---|---|---|---|
データストア | TransformedDatastore | カスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア。 |
|
CombinedDatastore | 2 つ以上の基になるデータストアからデータを読み取るデータストア。 | 異なるデータ ソースから取得した予測子と応答を結合する。 | |
カスタム ミニバッチ データストア | データのミニバッチを返すカスタム データストア。 | 他のデータストアでサポートされていない形式のデータを使用してニューラル ネットワークに学習させます。 詳細は、カスタム ミニバッチ データストアの開発を参照してください。 | |
数値配列または cell 配列 | 数値配列として指定した、単一のシーケンス。または数値配列の cell 配列として指定した、シーケンスのデータ セット。シーケンスを数値配列または cell 配列として指定した場合、引数 responses も指定しなければなりません。 | メモリに収まり、なおかつカスタム変換などの追加の処理を必要としないデータを使用して、ニューラル ネットワークに学習させます。 |
データストア
データストアは、シーケンスと応答のミニバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに変換を適用したい場合に最適です。
以下の一覧に、シーケンス データ用の trainNetwork
と直接互換性のあるデータストアを示します。
カスタム ミニバッチ データストア。詳細は、カスタム ミニバッチ データストアの開発を参照してください。
関数 transform
および combine
を使用して、深層学習ニューラル ネットワークに学習させるための他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを、trainNetwork
に必要な table または cell 配列形式に変換できます。たとえば、ArrayDatastore
オブジェクトおよび TabularTextDatastore
オブジェクトをそれぞれ使用して、インメモリ配列および CSV ファイルから読み取ったデータの変換と結合を行うことができます。
データストアは、table または cell 配列でデータを返さなければなりません。カスタム ミニバッチ データストアは、table を出力しなければなりません。
データストア出力 | 出力の例 |
---|---|
table | data = read(ds) data = 4×2 table Predictors Response __________________ ________ {12×50 double} 2 {12×50 double} 7 {12×50 double} 9 {12×50 double} 9 |
cell 配列 | data = read(ds) data = 4×2 cell array {12×50 double} {[2]} {12×50 double} {[7]} {12×50 double} {[9]} {12×50 double} {[9]} |
予測子の形式は、データのタイプによって異なります。
データ | 予測子の形式 |
---|---|
ベクトル シーケンス | c 行 s 列の行列。ここで、c はシーケンスの特徴の数、s はシーケンス長です。 |
1 次元イメージ シーケンス | h x c x s の配列。ここで、h および c はそれぞれイメージの高さおよびチャネル数に対応します。s はシーケンス長です。 ミニバッチ内の各シーケンスは、同じシーケンス長でなければなりません。 |
2 次元イメージ シーケンス | h x w x c x s の配列。ここで、h、w、および c はそれぞれイメージの高さ、幅、およびチャネル数に対応します。s はシーケンス長です。 ミニバッチ内の各シーケンスは、同じシーケンス長でなければなりません。 |
3 次元イメージ シーケンス | h x w x d x c x s の配列。ここで、h、w、d、および c は、それぞれイメージの高さ、幅、深さ、およびチャネル数に対応します。s はシーケンス長です。 ミニバッチ内の各シーケンスは、同じシーケンス長でなければなりません。 |
予測子が table で返される場合、数値スカラーまたは数値行ベクトルが要素に含まれているか、数値配列が格納された 1 行 1 列の cell 配列が要素に含まれていなければなりません。
応答の形式は、タスクのタイプによって異なります。
タスク | 応答の形式 |
---|---|
sequence-to-label 分類 | categorical スカラー |
sequence-to-one 回帰 | スカラー |
sequence-to-vector 回帰 | 数値行ベクトル |
sequence-to-sequence 分類 |
ミニバッチ内の各シーケンスは、同じシーケンス長でなければなりません。 |
sequence-to-sequence 回帰 |
ミニバッチ内の各シーケンスは、同じシーケンス長でなければなりません。 |
table で返される応答の場合、要素は、categorical スカラー、数値行ベクトルであるか、数値配列が格納された 1 行 1 列の cell 配列でなければなりません。
詳細については、深層学習用のデータストアを参照してください。
数値配列または cell 配列
メモリに収まり、なおかつカスタム変換などの追加の処理を必要としないデータの場合、単一のシーケンスを数値配列として指定するか、シーケンスのデータ セットを数値配列の cell 配列として指定することができます。シーケンスを cell 配列または数値配列として指定した場合、引数 responses
も指定しなければなりません。
cell 配列入力の場合、cell 配列は、数値配列から成る N 行 1 列の cell 配列でなければなりません。ここで、N は観測値の数です。シーケンスを表す数値配列のサイズと形状は、シーケンス データのタイプによって異なります。
入力 | 説明 |
---|---|
ベクトル シーケンス | c 行 s 列の行列。ここで、c はシーケンスの特徴の数、s はシーケンス長です。 |
1 次元イメージ シーケンス | h x c x s の配列。ここで、h および c はそれぞれイメージの高さおよびチャネル数に対応します。s はシーケンス長です。 |
2 次元イメージ シーケンス | h x w x c x s の配列。ここで、h、w、および c は、それぞれイメージの高さ、幅、およびチャネル数に対応します。s はシーケンス長です。 |
3 次元イメージ シーケンス | h x w x d x c x s。ここで、h、w、d、および c は、それぞれ 3 次元イメージの高さ、幅、深さ、およびチャネル数に対応します。s はシーケンス長です。 |
関数 trainNetwork
は、最大で 1 つのシーケンス入力層をもつニューラル ネットワークをサポートします。
ヒント
予測子または応答に
NaN
が含まれる場合、学習中、それらがニューラル ネットワーク全体に伝播されます。この場合、一般に学習が収束しなくなります。回帰タスクでは、応答の正規化が学習の安定化と高速化に役立つことがよくあります。詳細については、回帰用の畳み込みニューラル ネットワークの学習を参照してください。
この引数は複素数値の予測子をサポートします。関数
trainNetwork
を使用して複素数値の予測子をもつネットワークに学習させるには、入力層のSplitComplexInputs
オプションが1
(true
) でなければなりません。
features
— 特徴データ
データストア | 数値配列 | table
特徴データ。次のいずれかとして指定します。
データ型 | 説明 | 使用例 | |
---|---|---|---|
データストア | TransformedDatastore | カスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア。 |
|
CombinedDatastore | 2 つ以上の基になるデータストアからデータを読み取るデータストア。 |
| |
カスタム ミニバッチ データストア | データのミニバッチを返すカスタム データストア。 | 他のデータストアでサポートされていない形式のデータを使用してニューラル ネットワークに学習させます。 詳細は、カスタム ミニバッチ データストアの開発を参照してください。 | |
table | table として指定された特徴データ。特徴を table として指定した場合、引数 responses を使用して、応答を格納する列を指定することもできます。 | table に格納されたデータを使用してニューラル ネットワークに学習させます。 | |
数値配列 | 数値配列として指定された特徴データ。特徴を数値配列として指定した場合、引数 responses も指定しなければなりません。 | メモリに収まり、なおかつカスタム変換などの追加の処理を必要としないデータを使用して、ニューラル ネットワークに学習させます。 |
データストア
データストアは、特徴データと応答のミニバッチを読み取ります。データストアは、データがメモリに収まらない場合や、データに変換を適用したい場合に最適です。
以下の一覧に、特徴データ用の trainNetwork
と直接互換性のあるデータストアを示します。
カスタム ミニバッチ データストア。詳細は、カスタム ミニバッチ データストアの開発を参照してください。
関数 transform
および combine
を使用して、深層学習ニューラル ネットワークに学習させるための他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを、trainNetwork
に必要な table または cell 配列形式に変換できます。詳細については、深層学習用のデータストアを参照してください。
複数の入力があるニューラル ネットワークの場合、データストアは TransformedDatastore
オブジェクトまたは CombinedDatastore
オブジェクトでなければなりません。
データストアは、table または cell 配列でデータを返さなければなりません。カスタム ミニバッチ データストアは、table を出力しなければなりません。データストア出力の形式は、ニューラル ネットワーク アーキテクチャによって異なります。
ニューラル ネットワーク アーキテクチャ | データストア出力 | 出力の例 |
---|---|---|
単入力層 | 2 列の table または cell 配列。 最初の列と 2 番目の列は、それぞれ予測子と応答を指定します。 table の要素は、スカラー、行ベクトルであるか、数値配列が格納された 1 行 1 列の cell 配列でなければなりません。 カスタム ミニバッチ データストアは、table を出力しなければなりません。 | 1 つの入力と 1 つの出力があるニューラル ネットワークの table: data = read(ds) data = 4×2 table Predictors Response __________________ ________ {24×1 double} 2 {24×1 double} 7 {24×1 double} 9 {24×1 double} 9 |
1 つの入力と 1 つの出力があるニューラル ネットワークの cell 配列:
data = read(ds) data = 4×2 cell array {24×1 double} {[2]} {24×1 double} {[7]} {24×1 double} {[9]} {24×1 double} {[9]} | ||
多入力層 | ( 最初の 入力の順序は、層グラフ | 2 つの入力と 1 つの出力があるニューラル ネットワークの cell 配列: data = read(ds) data = 4×3 cell array {24×1 double} {28×1 double} {[2]} {24×1 double} {28×1 double} {[2]} {24×1 double} {28×1 double} {[9]} {24×1 double} {28×1 double} {[9]} |
予測子は、c 行 1 列の列ベクトルでなければなりません。ここで、c は特徴の数です。
応答の形式は、タスクのタイプによって異なります。
タスク | 応答の形式 |
---|---|
分類 | categorical スカラー |
回帰 |
|
詳細については、深層学習用のデータストアを参照してください。
table
メモリに収まり、なおかつカスタム変換などの追加の処理を必要としない特徴データの場合、特徴データと応答を table として指定できます。
table の各行は観測値に対応します。table の列での予測子と応答の配置は、タスクのタイプによって異なります。
タスク | 予測子 | 応答 |
---|---|---|
特徴分類 | 1 つ以上の列でスカラーとして指定された特徴。 引数 | カテゴリカル ラベル |
特徴回帰 | スカラー値から成る 1 つ以上の列 |
特徴入力のある分類ニューラル ネットワークでは、引数 responses
を指定しない場合、関数は既定で、tbl
の最初の (numColumns - 1
) 個の列を予測子に使用し、最後の列をラベルに使用します。ここで、numFeatures
は入力データの特徴の数です。
特徴入力のある回帰ニューラル ネットワークでは、responseNames
引数を指定しない場合、関数は既定で、最初の numFeatures
個の列を予測子に使用し、後続の列を応答に使用します。ここで、numFeatures
は入力データの特徴の数です。
数値配列
メモリに収まり、なおかつカスタム変換などの追加の処理を必要としない特徴データの場合、特徴データを数値配列として指定できます。特徴データを数値配列として指定した場合、引数 responses
も指定しなければなりません。
数値配列は、N 行 numFeatures
列の数値配列でなければなりません。ここで、N は観測値の数、numFeatures
は入力データの特徴の数です。
ヒント
応答の正規化は、回帰用のニューラル ネットワークの学習の安定化と高速化に役立つことがよくあります。詳細については、回帰用の畳み込みニューラル ネットワークの学習を参照してください。
応答に
NaN
が含まれていてはなりません。予測子データにNaN
が含まれる場合、学習を経由して伝播されます。ただし、ほとんどの場合に学習が収束しなくなります。この引数は複素数値の予測子をサポートします。関数
trainNetwork
を使用して複素数値の予測子をもつネットワークに学習させるには、入力層のSplitComplexInputs
オプションが1
(true
) でなければなりません。
mixed
— 混在データ
データストア
混在するデータまたは応答。次のいずれかとして指定します。
データ型 | 説明 | 使用例 |
---|---|---|
TransformedDatastore | カスタム変換関数を使用して、基になるデータストアから読み取ったデータのバッチを変換するデータストア。 |
|
CombinedDatastore | 2 つ以上の基になるデータストアからデータを読み取るデータストア。 |
|
カスタム ミニバッチ データストア | データのミニバッチを返すカスタム データストア。 | 他のデータストアでサポートされていない形式のデータを使用してニューラル ネットワークに学習させます。 詳細は、カスタム ミニバッチ データストアの開発を参照してください。 |
関数 transform
および combine
を使用して、深層学習ニューラル ネットワークに学習させるための他の組み込みデータストアを使用できます。これらの関数は、データストアから読み取られたデータを、trainNetwork
に必要な table または cell 配列形式に変換できます。詳細については、深層学習用のデータストアを参照してください。
データストアは、table または cell 配列でデータを返さなければなりません。カスタム ミニバッチ データストアは、table を出力しなければなりません。データストア出力の形式は、ニューラル ネットワーク アーキテクチャによって異なります。
データストア出力 | 出力の例 |
---|---|
( 最初の 入力の順序は、層グラフ | data = read(ds) data = 4×3 cell array {24×1 double} {28×1 double} {[2]} {24×1 double} {28×1 double} {[2]} {24×1 double} {28×1 double} {[9]} {24×1 double} {28×1 double} {[9]} |
イメージ、シーケンス、および特徴の予測子入力の場合、予測子の形式は、images
、sequences
、または features
のそれぞれの引数の説明に記載されている形式と一致しなければなりません。同様に、応答の形式は、タスクのタイプに対応する引数 images
、sequences
、または features
の説明に記載されている形式と一致しなければなりません。
関数 trainNetwork
は、最大で 1 つのシーケンス入力層をもつニューラル ネットワークをサポートします。
複数の入力をもつニューラル ネットワークに学習させる方法を説明する例については、イメージ データおよび特徴データにおけるネットワークの学習を参照してください。
ヒント
数値配列をデータストアに変換するには、
ArrayDatastore
を使用します。データのタイプが混在するニューラル ネットワークで層を結合する場合、データを結合層 (連結層や追加層など) に渡す前に再構築しなければならない場合があります。データを再構築するには、フラット化層を使用して空間次元をチャネル次元にフラット化するか、再構築および形状変更する
FunctionLayer
オブジェクトまたはカスタム層を作成します。この引数は複素数値の予測子をサポートします。関数
trainNetwork
を使用して複素数値の予測子をもつネットワークに学習させるには、入力層のSplitComplexInputs
オプションが1
(true
) でなければなりません。
responses
— 応答
categorical ベクトル | 数値配列 | シーケンスの cell 配列 | 文字ベクトル | 文字ベクトルの cell 配列 | string 配列
応答。
入力データが数値配列または cell 配列の場合、応答を次のいずれかとして指定します。
ラベルの categorical ベクトル
数値応答の数値配列
カテゴリカル シーケンスまたは数値シーケンスの cell 配列
入力データが table の場合、必要に応じて、table で応答を格納する列を次のいずれかとして指定できます。
文字ベクトル
文字ベクトルの cell 配列
string 配列
入力データが数値配列または cell 配列の場合、応答の形式はタスクのタイプによって異なります。
タスク | 形式 | |
---|---|---|
分類 | イメージ分類 | ラベルの N 行 1 列の categorical ベクトル。N は観測値の数です。 |
特徴分類 | ||
sequence-to-label 分類 | ||
sequence-to-sequence 分類 | ラベルのカテゴリカル シーケンスの N 行 1 列の cell 配列。N は観測値の数です。各シーケンスには、対応する予測子シーケンスと同じ数のタイム ステップがなければなりません。 観測値が 1 つの sequence-to-sequence 分類タスクでは、 | |
回帰 | 2 次元イメージ回帰 |
|
3 次元イメージ回帰 |
| |
特徴回帰 | N 行 R 列の行列。N は観測値の数、R は応答の数です。 | |
sequence-to-one 回帰 | N 行 R 列の行列。ここで、N はシーケンスの数、R は応答の数です。 | |
sequence-to-sequence 回帰 | 数値シーケンスの N 行 1 列の cell 配列。ここで、N はシーケンスの数です。シーケンスは次のいずれかで与えられます。
観測値が 1 つの sequence-to-sequence 回帰タスクでは、 |
ヒント
応答の正規化は、回帰用のニューラル ネットワークの学習の安定化と高速化に役立つことがよくあります。詳細については、回帰用の畳み込みニューラル ネットワークの学習を参照してください。
ヒント
応答に NaN
が含まれていてはなりません。予測子データに NaN
が含まれる場合、学習を経由して伝播されます。ただし、ほとんどの場合に学習が収束しなくなります。
layers
— ニューラル ネットワーク層
Layer
配列 | LayerGraph
オブジェクト
ニューラル ネットワーク層。Layer
配列または LayerGraph
オブジェクトとして指定します。
すべての層が順に結合されたニューラル ネットワークを作成する場合、Layer
配列を入力引数として使用できます。この場合、返されるニューラル ネットワークは、SeriesNetwork
オブジェクトになります。
有向非循環グラフ (DAG) ニューラル ネットワークは複雑な構造を持ち、層は複数の入出力を持てます。DAG ニューラル ネットワークを作成するには、ニューラル ネットワーク アーキテクチャを LayerGraph
オブジェクトとして指定して、その層グラフを trainNetwork
の入力引数として使用します。
関数 trainNetwork
は、最大で 1 つのシーケンス入力層をもつニューラル ネットワークをサポートします。
組み込み層の一覧については、深層学習層の一覧を参照してください。
options
— 学習オプション
TrainingOptionsSGDM
| TrainingOptionsRMSProp
| TrainingOptionsADAM
学習オプション。関数 trainingOptions
によって返される TrainingOptionsSGDM
、TrainingOptionsRMSProp
、または TrainingOptionsADAM
オブジェクトとして指定します。
出力引数
net
— 学習済みニューラル ネットワーク
SeriesNetwork
オブジェクト | DAGNetwork
オブジェクト
学習済みニューラル ネットワーク。SeriesNetwork
オブジェクトまたは DAGNetwork
オブジェクトとして返されます。
Layer
配列を使用してニューラル ネットワークに学習させる場合、net
は SeriesNetwork
オブジェクトになります。LayerGraph
オブジェクトを使用してニューラル ネットワークに学習させる場合、net
は DAGNetwork
オブジェクトになります。
info
— 学習に関する情報
構造体
学習に関する情報。構造体として返されます。ここで、各フィールドは、学習の反復ごとに 1 つの要素を持つスカラーまたは数値ベクトルです。
分類タスクでは、info
に次のフィールドが含められます。
TrainingLoss
— 損失関数値TrainingAccuracy
— 学習精度ValidationLoss
— 損失関数値ValidationAccuracy
— 検証精度BaseLearnRate
— 学習率FinalValidationLoss
— 返されたニューラル ネットワークの検証損失FinalValidationAccuracy
— 返されたニューラル ネットワークの検証精度OutputNetworkIteration
— 返されたニューラル ネットワークの反復回数
回帰タスクでは、info
に次のフィールドが含められます。
TrainingLoss
— 損失関数値TrainingRMSE
— 学習の RMSE 値ValidationLoss
— 損失関数値ValidationRMSE
— 検証の RMSE 値BaseLearnRate
— 学習率FinalValidationLoss
— 返されたニューラル ネットワークの検証損失FinalValidationRMSE
— 返されたニューラル ネットワークの検証 RMSEOutputNetworkIteration
— 返されたニューラル ネットワークの反復回数
options
で検証データが指定されている場合、構造体にはフィールド ValidationLoss
、ValidationAccuracy
、ValidationRMSE
、FinalValidationLoss
、FinalValidationAccuracy
、および FinalValidationRMSE
のみが含まれます。ValidationFrequency
学習オプションは、検証メトリクスの計算が行われる反復を決定します。最終検証メトリクスはスカラーです。構造体の他のフィールドは行ベクトルであり、各要素が学習の反復に対応します。検証メトリクスの計算が行われない反復の場合、構造体の対応する値は NaN
になります。
バッチ正規化層が含まれているニューラル ネットワークで、BatchNormalizationStatistics
学習オプションが 'population'
の場合、通常、最終検証メトリクスは学習中に評価される検証メトリクスとは異なります。これは、最終的なニューラル ネットワークのバッチ正規化層では、学習中とは異なる処理が実行されるためです。詳細については、batchNormalizationLayer
を参照してください。
詳細
チェックポイント ニューラル ネットワークの保存と学習の再開
Deep Learning Toolbox™ では、学習の際、ニューラル ネットワークを .mat ファイルとして保存できます。この定期的な保存は、ニューラル ネットワークまたはデータ セットが大規模であり、学習に時間がかかる場合に特に便利です。学習が何らかの理由で中断された場合、最後に保存されたチェックポイント ニューラル ネットワークから学習を再開できます。関数 trainNetwork
にチェックポイント ニューラル ネットワークを保存させる場合は、trainingOptions
の CheckpointPath
オプションを使用してパス名を指定しなければなりません。指定したパスが存在していない場合、trainingOptions
はエラーを返します。
ソフトウェアは、チェックポイント ニューラル ネットワーク ファイルに一意の名前を自動的に割り当てます。例の名前 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
オブジェクトと共に予測関数または検証関数を使用する場合、ソフトウェアは単精度浮動小数点演算を使用して、これらの計算を実行します。予測および検証のための関数には、predict
、classify
、および activations
があります。CPU と GPU の両方を使用してニューラル ネットワークに学習させる場合、単精度演算が使用されます。
再現性
最高のパフォーマンスを提供するために、GPU を使用した MATLAB® での深層学習は確定的であることを保証しません。ネットワーク アーキテクチャによっては、GPU を使用して 2 つの同一のネットワークに学習させたり、同じネットワークとデータを使用して 2 つの予測を行ったりする場合に、ある条件下で異なる結果が得られることがあります。
拡張機能
自動並列サポート
Parallel Computing Toolbox™ を使用して自動的に並列計算を実行することで、コードを高速化します。
計算を並列実行するには、ExecutionEnvironment
学習オプションを "multi-gpu"
または "parallel"
に設定します。
trainingOptions
を使用して ExecutionEnvironment
学習オプションを設定し、このオプションを trainNetwork
に指定します。ExecutionEnvironment
を設定しない場合、GPU が利用できる場合は trainNetwork
が GPU で実行されます。
詳細は、Scale Up Deep Learning in Parallel, on GPUs, and in the Cloudを参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
メモリ不足エラーを防ぐため、学習データの大規模なセットを GPU に移動しないことを推奨します。GPU でニューラル ネットワークに学習させる場合は、そうする代わりに、
trainingOptions
を使用してExecutionEnvironment
を"auto"
または"gpu"
に設定し、このオプションをtrainNetwork
に与えてください。入力データが以下の場合、
ExecutionEnvironment
オプションは"auto"
または"gpu"
でなければなりません。gpuArray
gpuArray
オブジェクトを含む cell 配列gpuArray
オブジェクトを含む tablegpuArray
オブジェクトを含む cell 配列を出力するデータストアgpuArray
オブジェクトを含む table を出力するデータストア
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2016a で導入R2024a: 非推奨
R2024a 以降、関数 trainNetwork
は非推奨となりました。代わりに関数 trainnet
を使用してください。
関数 trainNetwork
のサポートを削除する予定はありません。ただし、関数 trainnet
には次の利点があるため、代わりにこの関数を使うことを推奨します。
trainnet
はdlnetwork
オブジェクトをサポートしています。このオブジェクトは、ユーザーが作成したり外部のプラットフォームからインポートしたりできる、さまざまなネットワーク アーキテクチャをサポートしています。trainnet
を使用すると、損失関数を簡単に指定できます。組み込みの損失関数を選択するか、カスタム損失関数を指定できます。trainnet
はdlnetwork
オブジェクトを出力します。このオブジェクトは、ネットワークの構築、予測、組み込み学習、可視化、圧縮、検証、およびカスタム学習ループをサポートする統合されたデータ型です。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
を使用して損失関数を指定してください。
R2022b: SequenceLength
学習オプションを整数として指定した場合、trainNetwork
は、分割を行う前に最も長いシーケンスに合わせてミニバッチをパディングする
R2022b 以降、関数 trainNetwork
を使用してシーケンス データでニューラル ネットワークに学習させるときに、SequenceLength
オプションが整数である場合、各ミニバッチ内で最も長いシーケンスに合わせてシーケンスがパディングされた後、指定したシーケンス長でシーケンスが分割されてミニバッチが作成されます。SequenceLength
によってミニバッチのシーケンスを均等に分割できない場合、最後に分割されたミニバッチの長さは SequenceLength
より短くなります。この動作によって、パディング値しか含まれないタイム ステップでニューラル ネットワークの学習が行われるのを防ぐことができます。
以前のリリースでは、SequenceLength
の倍数に最も近く、かつミニバッチ長以上の長さとなるように、シーケンスのミニバッチをパディングしてから、データが分割されていました。この動作を再現するには、カスタム学習ループを使用し、データのミニバッチを前処理するタイミングでこの動作を実装します。
R2021b: 損失が NaN
になると trainNetwork
が学習を自動的に停止
関数 trainNetwork
を使用してニューラル ネットワークに学習させる際、損失が NaN
になると学習が自動的に停止します。通常、損失値が NaN
になると、ニューラル ネットワークの学習可能パラメーターの値が NaN
になり、その結果、ニューラル ネットワークが学習できなくなったり有効な予測を行えなくなったりする可能性があります。今回の変更によって、学習が完了する前にニューラル ネットワークの問題を特定できるようになりました。
以前のリリースでは、損失が NaN
になってもニューラル ネットワークは学習を続けていました。
R2021a: MAT ファイル パスの table による指定のサポートは削除予定
関数 trainNetwork
用のシーケンス データを指定する際、MAT ファイル パスの table による指定がサポートされていますが、これは将来のリリースで削除される予定です。
メモリに収まらないシーケンスでニューラル ネットワークに学習させる場合は、データストアを使用してください。任意のデータストアを使用してデータを読み取ってから、関数 transform
を使用してデータストアの出力を関数 trainNetwork
が必要とする形式に変換します。たとえば、FileDatastore
オブジェクトまたは TabularTextDatastore
オブジェクトを使用してデータを読み取り、関数 transform
を使用してその出力を変換します。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)