matlab-train-network について
MATLAB でニューラルネットワークを学習・評価・高速化し、対応モデルを Simulink にエクスポートするスキルです。`dlnetwork` のワークフロー、表形式データ向けの選択肢、推論、転移学習、旧 API からの移行を扱います。
主な機能
- 01`trainnet` と `dlnetwork` によるネットワーク学習
- 02表形式データ向けの `fitcnet` と `fitrnet`
- 03バッチ推論とテスト指標の評価
- 04事前学習済み画像ネットワークによる転移学習
- 05`dlaccelerate` による深層学習関数の高速化
- 06対応モデルの Simulink へのエクスポート
活用シーン
- 01分類または回帰ネットワークの構築
- 02事前学習済み画像モデルのファインチューニング
- 03テストデータセットでの予測評価
- 04旧式の学習コードを現行 API へ移行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ matlab/ matlab-agentic-toolkit --skill matlab-train-networkインストール後、Claude Code で/matlab-train-networkを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
manifest.yamlreferences/dlaccelerate-antipatterns.mddlaccelerate-custom-layers.mddlaccelerate-custom-training-loop.mddlaccelerate-measure-speedup.mddlaccelerate-trainnet-custom-loss.mddlaccelerate-variable-length-sequences.mddlaccelerate-workflow.mdlegacy-api-redirects.mdmetrics-guidance.mdmulti-output-training.mdnormalization.mdsimulink-export.md詳細
matlab-train-network
MATLAB で推奨される dlnetwork ベースの API(trainnet、dlnetwork、minibatchpredict、scores2label、testnet、imagePretrainedNetwork)を使用してニューラルネットワークをトレーニング、評価し、Simulink にエクスポートします。表形式データには、Statistics and Machine Learning Toolbox の関数 fitcnet と fitrnet を使用します。
使用するタイミング
ユーザーから次の依頼があった場合に、このスキルを有効にしてください。
- 任意のニューラルネットワーク(分類器、回帰、マルチ出力、LSTM、CNN など)をトレーニングする
- 転移学習のために、事前トレーニング済みモデルをファインチューニングまたは使用する
- テストデータでトレーニング済みネットワークを評価する
- トレーニング済みネットワークで推論を実行する/予測する
- トレーニング済みネットワークを Simulink にエクスポートする
- 既存のレガシーコード(patternnet、fitnet、narxnet、gensim)や非推奨のコード (trainNetwork、DAGNetwork、classify)を推奨 API に移行する
- 「pattern recognition network」、「function fitting network」、「NARX network」、または従来 Neural Network Toolbox の浅層ネットワーク API に関連付けられていたタスクを作成する
- 深層学習コードを高速化または最適化する(dlaccelerate の名前を挙げていない場合も含む)
- dlaccelerate を使用して既存の深層学習コードを高速化する
- dlaccelerate の問題を診断して修正する(HitRate が低い、再トレースが発生する、dlaccelerate の使用後にコードが遅くなる)
- カスタムトレーニングを高速化する(dlfeval/dlgradient を使用するコード)
- dlarray 入力に対応し、実行時間の長い関数を高速化する
- trainnet に渡すカスタム損失関数を高速化する(R2026a 以降)
使用しないタイミング
- モデルのインポート/エクスポート(importNetworkFromPyTorch、exportONNXNetwork)
- データの読み込みと前処理(imageDatastore、変換、データ拡張)
- ネットワークアーキテクチャの設計判断(CNN、LSTM、transformer の選択)
- 強化学習のワークフロー(Reinforcement Learning Toolbox を使用)
- 物体検出(Computer Vision Toolbox の専用検出器トレーニング関数を使用)
判断:fitrnet/fitcnet と trainnet
以下のトレーニングワークフローを開始する前に、この基準を確認してください。
| 基準 | fitcnet/fitrnet | trainnet |
|---|---|---|
| 使いやすさ | 最も簡単 — 関数呼び出し 1 回 | ネットワーク定義と trainingOptions が必要 |
| ソルバー | L-BFGS | Adam、SGDM、RMSProp、L-BFGS、LM(R2024b 以降) |
| 損失関数 | MSE とクロスエントロピーのみ | 組み込みまたはカスタムの任意の関数(関数ハンドルを渡す) |
| 複数の入力/出力分岐 | いいえ | はい |
| カスタムアーキテクチャ | Network 引数で指定(R2025a 以降) | はい |
| データ型 | 表形式データのみ(テーブルまたは数値行列) | 表形式データに加え、その他すべて(シーケンス、画像、複数入力) |
テーブルは trainnet、fitcnet、fitrnet に直接渡してください。入力にカテゴリ列が含まれる場合は、そのまま渡してください。自動的にエンコードされます(fitcnet/fitrnet は常に対応。trainnet/minibatchpredict/testnet は R2025a 以降に対応)。
% Classification
mdl = fitcnet(tbl,responseName,LayerSizes=20);
[labels,score] = predict(mdl,tblTest);
L = loss(mdl,tblTest);
% Regression
mdl = fitrnet(tbl,responseName,LayerSizes=[20 20]);
Y = predict(mdl,tblTest);
L = loss(mdl,tblTest);
% Tabular data with trainnet (when fitcnet/fitrnet can't be used)
net = trainnet(tbl,net,"crossentropy",options);
accuracy = testnet(net,tblTest,"accuracy");
scores = minibatchpredict(net,tblPredictors);
- R2024b 以降、
fitrnetは複数の応答変数に対応しています。 - R2025a 以降、
LayerSizes、Activations、LayerWeightsInitializer、LayerBiasesInitializer以外のカスタムアーキテクチャを指定するには、Networkの名前と値の引数でdlnetworkを渡してください。
規約
trainnet + dlnetwork によるトレーニング
データ形式
trainnet は、デフォルトで特定の配置のデータを想定します。
| 入力層 | 想定されるデータ形状 |
|---|---|
featureInputLayer(C) | 観測値×チャネル(例:150×4) |
imageInputLayer([H W C]) | 高さ×幅×チャネル×観測値(例:28×28×1×5000) |
sequenceInputLayer(C) | 時間ステップ×チャネル×観測値、または各要素が時間ステップ×チャネルの時系列である観測値×1のセル配列 |
データの配置が異なる場合は、データを手動で転置するのではなく、trainingOptions で
InputDataFormats や TargetDataFormats を使用してください。
形式文字列はデータの現在の配置を表します。目的の配置ではなく、次元ごとに1文字を指定します。MATLAB が内部で再配置を処理します。
セル配列の場合は、形式文字列に "B"(バッチ)を追加します。たとえば、
C×T の行列を格納したセル配列には InputDataFormats="CTB" を指定します。データがすでに入力層のデフォルトの形式に一致している場合、これらのオプションは指定しないでください。
trainnet がサポートする内容
Deep Learning Toolbox のトレーニングには、すべて trainnet と dlnetwork を使用してください。以下が含まれます。
- 標準的な分類と回帰
- 転移学習
- 複数入力または複数出力のネットワーク
- カスタム損失関数(関数ハンドルを
trainnetに渡します) DifferentiableFunctionによるカスタム損失関数の逆伝播- カスタムメトリクス(文字列、関数ハンドル、または
deep.Metricサブクラス) trainingOptionsのOutputFcnによるカスタム停止基準- カスタムレイヤー
カスタムトレーニングループ(dlfeval/dlgradient/更新関数)は、ワークフローで trainingOptions では実現できないカスタマイズや、特定のワークフロー(複数モデルによる敵対的学習、交互更新、カスタム重み更新ルールなど)が必要な場合に適しています。なお、trainingOptions は L-BFGS(R2023b 以降)と Levenberg-Marquardt "lm"(R2024b 以降)をサポートしています。
動作するカスタムトレーニングループがあり、その高速化を求められた場合は、dlaccelerate を直接適用してください。そのワークフローは trainnet でも表現できる可能性がある(高速化を内部で処理します)ことには触れてもかまいませんが、変換を強く勧めないでください。現在のコードの高速化に焦点を当ててください。
次のレガシー API または非推奨 API は絶対に使用しないでください
ユーザーがこれらの API を使用する既存のコードを持っている場合は、推奨される代替手段に移行し、置き換えた API と最新の同等 API を簡潔に説明してください。ユーザーからレガシー API または非推奨 API を名前で指定された場合は、そのリクエストを受け止め、解決策を提示する前に、その関数が推奨される代替手段に置き換えられていることを説明してください。
| レガシー API または非推奨 API | 推奨される代替手段 |
|---|---|
trainNetwork | trainnet |
patternnet | fitcnet(推奨)、または dlnetwork + trainnet |
fitnet | fitrnet(推奨)、または dlnetwork + trainnet |
feedforwardnet | dlnetwork + trainnet |
narxnet, timedelaynet | nlarx(推奨)、または dlnetwork + trainnet |
train()(浅い network オブジェクト) | trainnet |
classify | minibatchpredict + scores2label |
activations | minibatchpredict(net,data,Outputs=layer) |
predictAndUpdateState, classifyAndUpdateState | [Y,state] = predict(net,X); net.State = state; |
classificationLayer | 不要です — 損失として "crossentropy" を指定して trainnet を使用してください |
regressionLayer | 不要です — 損失として "mse" を指定して trainnet を使用してください |
DAGNetwork, SeriesNetwork, layerGraph | dlnetwork — マルチブランチアーキテクチャで addLayers、connectLayers、replaceLayer をサポートします。layerGraph でできることはすべて、dlnetwork で直接実行できます |
resnet18, googlenet, squeezenet など(DAGNetwork を返す事前学習済みネットワーク関数) | imagePretrainedNetwork("resnet18", ...) — dlnetwork を返し、ヘッドの置き換えを自動的に処理します |
ネットワークのスコアを手動でラベルに変換する(例:[~,idx] = max(scores)) | scores2label |
plotconfusion | confusionchart |
gensim | exportNetworkToSimulink(推奨)、または Predict ブロック |
preparets | nlarx(推奨。遅延を内部で処理します)、または sequenceInputLayer(C, MinLength=numDelays) + convolution1dLayer(numDelays, ..., Padding="causal") を使用する dlnetwork |
closeloop | forecast(nlarx と併用する場合に推奨)、または前の予測を入力として戻す反復的な predict ループ |
使用前と使用後のコード例については、references/legacy-api-redirects.md を参照してください。
推論 — minibatchpredict(または predict)を使用する
推論のためにバッチごとに predict または forward を呼び出す for ループがある場合は、ループ全体を minibatchpredict に置き換えてください。バッチ処理、GPU 転送、dlarray 変換、高速化を自動的に処理します。出力形式(数値配列、テーブル、またはセル配列)は、入力の型とネットワークによって異なります。
例外: predict 呼び出しの前後に、そこから分離できないカスタムの前処理や後処理がループに含まれている場合、minibatchpredict ではパイプライン全体を再現できません。その場合は、カスタム関数全体を dlaccelerate でラップしてください(references/dlaccelerate-workflow.md を参照)。関数を minibatchpredict 呼び出しと、別個に高速化した前処理・後処理に分割しないでください。関数全体を単一の dlaccelerate 境界で囲むことで、統一されたトレースが生成されます。
- 分類の場合:
minibatchpredict(またはpredict)+scores2labelを使用してください。 - 回帰の場合、または生のスコアが必要な場合:
minibatchpredictまたはpredictを使用してください。 predictは単一バッチまたは小さなバッチでの使用を想定しており、通常の数値配列を直接受け取れます — 入力をdlarrayでラップしたり、出力にextractdataを呼び出したりしないでください。
評価 — testnetを使用する
- 手動で計算する代わりに、
testnetを使用してテストデータセットで学習後のメトリクスを計算します。 - 単一出力ネットワークでは、文字列形式のメトリクス
"accuracy"、"rmse"を使用します。 trainnetとtestnetでターゲットを別の引数として指定できるのは、メモリ内データの場合のみです(testnet(net,XTest,TTest,"accuracy"))。データストアを渡す場合、ターゲットはあらかじめデータストアに含めておく必要があります(ラベル付きのimageDatastoreや、2列目にターゲットを含む結合データストアなど)。- 複数出力ネットワークや高度なメトリクスのカスタマイズについては、
references/metrics-guidance.mdを参照してください。
転移学習 — imagePretrainedNetworkを使用する
net = imagePretrainedNetwork("squeezenet",NumClasses=5);
options = trainingOptions("adam", ...
MaxEpochs=10, ...
MiniBatchSize=16, ...
InitialLearnRate=1e-4, ...
ValidationData=imdsVal, ...
Metrics="accuracy", ...
Plots="training-progress");
net = trainnet(augimdsTrain,net,"crossentropy",options);
% Inference — class names come from training data, not the pretrained net
classNames = categories(imdsTrain.Labels);
scores = minibatchpredict(net,imdsTest);
labels = scores2label(scores,classNames);
imagePretrainedNetworkがクラス名を返すのは、NumClassesとNumResponsesの両方が未設定の場合(事前学習モードで、転移学習を行わない場合)のみです。
ワークフロー:学習
まず上記の「判断」セクションを確認してください。表形式データでは、LBFGS以外のソルバーやMSE/交差エントロピー以外の損失関数が必要でない限り、fitrnet/fitcnetを使用します。
標準的な学習
% Define network
numChannels = 3;
numClasses = 5;
layers = [
sequenceInputLayer(numChannels,Normalization="zscore")
lstmLayer(100,OutputMode="last")
fullyConnectedLayer(numClasses)
softmaxLayer];
% Training options
options = trainingOptions("adam", ...
MaxEpochs=30, ...
MiniBatchSize=128, ...
ValidationData={XVal,TVal}, ...
Metrics="accuracy", ...
Plots="training-progress");
% Train
net = trainnet(XTrain,TTrain,layers,"crossentropy",options);
入力は常に正規化してください。入力層でNormalizationを設定します(上記の例を参照)。回帰の場合は、ターゲットも正規化してください。
- R2026a以降:最後の層に
inverseNormalizationLayerを追加し、trainingOptionsでNormalizeTargets=trueを設定します。 - R2026aより前:学習前にターゲットを手動でzスコア標準化し、推論時に予測値を逆正規化します。
どちらのワークフローについても、references/normalization.mdを参照してください。
複数出力用のカスタム損失関数
関数ハンドルには、ネットワークの出力、次にターゲットの順で渡されます。categoricalターゲットはそのまま渡してください。trainnetが自動的にエンコードします。
lossFcn = @(Y1,Y2,T1,T2) crossentropy(Y1,T1) + mse(Y2,T2);
net = trainnet(ds,net,lossFcn,options);
OutputNamesの整合、結合データストア、testnetによる評価を含む複数出力の完全な手順については、references/multi-output-training.mdを参照してください。
複数出力の損失関数は関数ハンドルなので、dlaccelerateを使って高速化できます。必ずユーザーに伝えてください。学習の高速化を尋ねられていない場合でも、カスタム損失関数の関数ハンドルはdlaccelerateで高速化して、学習を速められることを伝えてください。検証と本番環境でのワークフローについては、references/dlaccelerate-trainnet-custom-loss.mdを参照してください。
ワークフロー:Simulinkへのエクスポート
dlnetwork(小規模で、すべての層がサポートされている場合):exportNetworkToSimulinkを使用します。dlnetwork(大規模、またはexportNetworkToSimulinkでサポートされていない層を含む場合):ライブラリパスdeeplib/PredictにあるPredictブロックを使用します。fitcnet/fitrnetモデル:statsLibrary/にあるClassificationNeuralNetwork PredictまたはRegressionNeuralNetwork Predictブロックを使用します。
詳細については、references/simulink-export.mdを参照してください。
ワークフロー:dlaccelerate によるディープラーニングコードの高速化 — 診断、修正、または適用
次には適用されません:
- Simulink のエクスポート
- MEX/Coder のコンパイル
fitcnet/fitrnet/nlarxのワークフロー
次の場合に適用されます:
- ユーザーがカスタムのトレーニングループ(
dlfeval/dlgradient)を使用している - ユーザーが dlarray 入力に対応した、実行時間の長い関数を使用している
- ユーザーがカスタム損失関数ハンドルを指定して
trainnetを呼び出している(R2026a 以降)
次の条件を満たす関数は、必ず dlaccelerate の適用を試してください。
- 実行時間が長い。
- dlarray オブジェクト、dlarray オブジェクトの構造体、または dlnetwork オブジェクトを入力として受け取る。
- 出力変数に影響する操作のみを実行する。出力変数に影響しない操作には、プロット、出力の表示、ファイルへの書き込みなどがあります。
推奨する前に、references/dlaccelerate-workflow.md の手順 0 を確認し、
その関数が dlaccelerate の適用対象かどうかを判断してください。
診断/修正/改善の全プロセスについては、references/dlaccelerate-workflow.md に
従ってください。開始する手順は次のとおりです。
- ユーザーが「高速化して」や「速度を上げて」と依頼し、コードにカスタムのトレーニングループがある場合: 手順 0 から開始します。
- コードがすでに
dlaccelerateを使用していて問題がある場合: 手順 1 から開始します(アンチパターンを特定し、修正を適用して、検証します)。 dlaccelerateを使用していないカスタムのトレーニングループ: 手順 0 から開始します(要件を確認し、ラップして、検証します)。- dlarray 入力を受け取る関数が繰り返し呼び出される場合: 手順 0 から開始します。 これには、予測に使用するカスタムモデル関数も含まれます。
- カスタムの推論関数が繰り返し呼び出される場合: 同じく手順 0 が適用されます。
dlaccelerateはトレーニング専用ではありません。繰り返し呼び出される dlarray 関数であれば、どのような関数でも効果があります。ループ内でpredictを前処理や後処理なしで呼び出すだけの場合はminibatchpredictを使用し、predictの呼び出しの前後にカスタム操作がある場合はdlaccelerateを使用します。 trainnetとカスタム損失関数ハンドルの組み合わせ(R2026a 以降): 損失関数をdlaccelerateでラップし、AcceleratedFunction をtrainnetに渡します。 詳しくはreferences/dlaccelerate-trainnet-custom-loss.mdを参照してください。
トレースを妨げるアンチパターンとその修正については、
references/dlaccelerate-antipatterns.md を参照してください。
dlaccelerate のリファレンス
references/dlaccelerate-workflow.md— 診断/修正/改善の全プロセスreferences/dlaccelerate-antipatterns.md— BAD/GOOD の例を含むパターンカタログreferences/dlaccelerate-custom-training-loop.md— 高速化レベル、L2、クリッピングreferences/dlaccelerate-trainnet-custom-loss.md— trainnet とカスタム損失関数(R2026a 以降)references/dlaccelerate-variable-length-sequences.md— パディング/バケット化の戦略references/dlaccelerate-custom-layers.md— dlaccelerate に対応したカスタムレイヤー(nnet.layer.Acceleratable)references/dlaccelerate-measure-speedup.md— ベンチマークの手法
主な関数
| 関数 | 目的 |
|---|---|
fitcnet | テーブルデータ用のニューラルネットワーク分類器を学習します(Statistics and Machine Learning Toolbox) |
fitrnet | テーブルデータを対象とする回帰用ニューラルネットワークを学習します(Statistics and Machine Learning Toolbox) |
nlarx | NARX/時間遅延時系列用の非線形 ARX モデル(System Identification Toolbox) |
trainnet | 組み込みまたはカスタムの損失関数を使用して、任意の dlnetwork を学習します |
dlnetwork | 最新のネットワークオブジェクト(DAGNetwork/SeriesNetwork/LayerGraph に代わるもの) |
trainingOptions | ソルバー、エポック数、検証、メトリクスを設定します |
minibatchpredict | ミニバッチ推論を実行します(バッチ処理を自動で行います) |
scores2label | スコア行列をカテゴリラベルに変換します |
testnet | データセット上でメトリクスを使用してネットワークを評価します(バッチ処理を自動で行います) |
predict | dlnetwork、ClassificationNeuralNetwork、RegressionNeuralNetwork に対する単一バッチ推論を実行します |
imagePretrainedNetwork | ヘッドを自動で置き換えて、事前学習済みモデルを読み込みます |
exportNetworkToSimulink | dlnetwork をレイヤーブロックとして Simulink にエクスポートします |
analyzeNetwork | ネットワークを検査します:info = analyzeNetwork(net) はレイヤー情報、パラメーター数、アーキテクチャ上の問題を返します |
minibatchqueue | バッチごとのカスタム前処理を適用して、ミニバッチを管理します |
dlaccelerate | 実行グラフをトレースしてキャッシュすることで、ディープラーニング関数を高速化します |
よくある間違い
| エージェントが試す可能性のあること | 間違っている理由 | 代わりに行うこと |
|---|---|---|
predict(net,dlarray(X,"TCB")) | 不要です。dlnetwork に対する predict は通常の配列を受け付けます | predict(net,X) |
| 学習後に精度/RMSEを手動で計算する | 既存の機能で対応できます | testnet(net,XTest,TTest,"accuracy") |
squeezenet + layerGraph + replaceLayer | 転移学習での手動のレイヤー変更は推奨されません | imagePretrainedNetwork("squeezenet",NumClasses=N) |
| 複数出力用にカスタムの学習ループを作成する | 複雑さが不要に増します | 関数ハンドルの損失関数を指定して trainnet を使用します |
デフォルトのレイアウトに合わせてデータを転置する(例:cellfun(@transpose,...)) | 複雑さが不要に増します | InputDataFormats、TargetDataFormats を使用し、データの実際の次元順序に合わせて文字を並べます |
testnet(net,ds,labels,"accuracy") | testnet はデータストアを使用する場合、個別のターゲットを受け付けません | testnet(net,ds,"accuracy") |
テーブルデータに trainnet を使用する | MSE/交差エントロピー損失と LBFGS ソルバーを使う場合、複雑さが不要に増します | fitrnet または fitcnet |
出力を受け取らずに analyzeNetwork(net) を実行する | レイヤー情報、パラメーター数、問題にプログラムからアクセスできなくなります | info = analyzeNetwork(net) |
trainnet/fitcnet/fitrnet に渡す前にカテゴリ列を手動でエンコードする | これらの関数はカテゴリデータを自動でエンコードするため、複雑さが不要に増します | カテゴリデータをそのまま渡します |
| 推論用に手動で for ループを使ってバッチ処理する | 複雑さが不要に増します | minibatchpredict(net,X) を使用します。バッチ処理、GPU 転送、高速化を自動で行います |
| カスタム前処理用に手動で for ループを使ってバッチ処理する | 複雑さが不要に増します | minibatchqueue を使用します。バッチ処理、GPU 転送、dlarray 変換、カスタム変換を自動で行います |
Copyright 2026 The MathWorks, Inc.