メインコンテンツ

sim

R2026b

(削除予定) ニューラル ネットワークのシミュレーション

sim は将来のリリースで削除される予定です。詳細については、レガシ ニューラル ネットワーク コードの dlnetwork ワークフローへの移行を参照してください。

コードの更新に関するアドバイスについては、バージョン履歴を参照してください。

構文

[Y,Xf,Af] = sim(net,X,Xi,Ai,T)
[Y,Xf,Af] = sim(net,{Q TS},Xi,Ai)
[Y,...] = sim(net,...,'useParallel',...)
[Y,...] = sim(net,...,'useGPU',...)
[Y,...] = sim(net,...,'showResources',...)
[Ycomposite,...] = sim(net,Xcomposite,...)
[Ygpu,...] = sim(net,Xgpu,...)

ヘルプの表示

help network/sim と入力します。

説明

sim は、ニューラル ネットワークのシミュレーションを行います。

[Y,Xf,Af] = sim(net,X,Xi,Ai,T) は、次の引数を取ります。

net

ネットワーク

X

ネットワークの入力

Xi

入力遅延の初期条件 (既定値 = ゼロ配列)

Ai

層遅延の初期条件 (既定値 = ゼロ配列)

T

ネットワークのターゲット (既定値 = ゼロ配列)

これは、以下を返します。

Y

ネットワークの出力

Xf

最終の入力遅延条件

Af

最終の層遅延条件

sim は通常、ニューラル ネットワークを関数として呼び出すことによって、暗黙的に呼び出されます。たとえば、次の 2 つの式は同じ結果を返します。

y = sim(net,x,xi,ai)
y = net(x,xi,ai)

引数 Xi、Ai、Xf、および Af はオプションであり、入力または層の遅延があるネットワークにのみ使用する必要があることに注意してください。

信号引数には、cell 配列と行列の 2 つの形式があります。

cell 配列形式は、記述が最も簡単です。これは複数の入出力があるネットワークの場合に非常に便利で、入力をシーケンスで与えることができます。

X

Ni 行 TS 列の cell 配列

各要素 X{i,ts} は、Ri 行 Q 列の行列。

Xi

Ni 行 ID 列の cell 配列

各要素 Xi{i,k} は、Ri 行 Q 列の行列。

Ai

Nl 行 LD 列の cell 配列

各要素 Ai{i,k} は、Si 行 Q 列の行列。

T

No 行 TS 列の cell 配列

各要素 X{i,ts} は、Ui 行 Q 列の行列。

Y

No 行 TS 列の cell 配列

各要素 Y{i,ts} は、Ui 行 Q 列の行列。

Xf

Ni 行 ID 列の cell 配列

各要素 Xf{i,k} は、Ri 行 Q 列の行列。

Af

Nl 行 LD 列の cell 配列

各要素 Af{i,k} は、Si 行 Q 列の行列。

ここで、

Ni = net.numInputs
Nl = net.numLayers
No = net.numOutputs
ID = net.numInputDelays
LD = net.numLayerDelays
TS =

タイム ステップ数

Q =

バッチのサイズ

Ri = net.inputs{i}.size
Si = net.layers{i}.size
Ui = net.outputs{i}.size

Xi、Ai、Xf、および Af の列は、最も古い遅延条件から最新の遅延条件まで順に並べられます。

Xi{i,k}=

時間 ts = k - ID の入力 i

Xf{i,k}=

時間 ts = TS + k - ID の入力 i

Ai{i,k}=

時間 ts = k - LD の層出力 i

Af{i,k}=

時間 ts = TS + k - LD の層出力 i

行列形式は、1 タイム ステップのみのシミュレーションが行われる (TS = 1) の場合に使用できます。これは入出力が 1 つしかないネットワークの場合に便利ですが、複数の入出力があるネットワークにも使用できます。

行列の各引数は、対応する cell 配列引数の要素を単一の行列に格納することによって求められます。

X

(sum of Ri) 行 Q 列の行列

Xi

(sum of Ri) 行 (ID*Q) 列の行列

Ai

(sum of Si) 行 (LD*Q) 列の行列

T

(sum of Ui) 行 Q 列の行列

Y

(sum of Ui) 行 Q 列の行列

Xf

(sum of Ri) 行 (ID*Q) 列の行列

Af

(sum of Si) 行 (LD*Q) 列の行列

[Y,Xf,Af] = sim(net,{Q TS},Xi,Ai) は、cell 配列表記が使用される場合に、入力がないネットワークに使用されます。

[Y,...] = sim(net,...,'useParallel',...)、[Y,...] = sim(net,...,'useGPU',...)、[Y,...] = sim(net,...,'showResources',...) (または関数として呼び出されるネットワーク) は、オプションの名前と値のペアの引数を受け入れ、計算の実行方法を制御します。これらのうち 2 つのオプションを使用すると、Parallel Computing Toolbox が利用可能な場合に、並列ワーカーまたは GPU デバイスを使用して、学習をより高速に、またはより大規模なデータセットで行うことができます。オプションの名前と値のペアを以下に示します。

'useParallel','no'

通常の MATLAB スレッドで計算が実行されます。これは、'useParallel' の既定の設定です。

'useParallel','yes'

並列プールが開いている場合、計算は並列ワーカーで実行されます。そうでない場合、通常の MATLAB スレッドで計算が実行されます。

'useGPU','no'

CPU で計算が実行されます。これは、'useGPU' の既定の設定です。

'useGPU','yes'

現在の gpuDevice がサポートされている GPU の場合 (Parallel Computing Toolbox の GPU 要件を参照)、計算はこの gpuDevice で実行されます。現在の gpuDevice がサポートされていない場合、計算は CPU で実行されます。'useParallel' も 'yes' であり、並列プールが開いている場合、固有の GPU を持つ各ワーカーはその GPU を使用し、他のワーカーはそれぞれの CPU コアで計算を実行します。

'useGPU','only'

どの並列プールも開いていない場合、この設定は 'yes' と同じになります。並列プールが開いている場合、固有の GPU を持つワーカーのみが使用されます。ただし、並列プールが開いていても、サポートされている GPU が利用できない場合、計算は全ワーカー CPU での実行に戻ります。

'showResources','no'

使用されるコンピューティング リソースをコマンド ラインに表示しません。これは既定の設定です。

'showResources','yes'

実際に使用されるコンピューティング リソースの概要をコマンド ラインに表示します。並列計算または GPU コンピューティングが要求されても、並列プールが開いていないか、サポートされている GPU が利用できない場合、実際のリソースが要求されたリソースと異なる場合があります。並列ワーカーが使用される場合、使用されていないプール内のワーカーを含む、各ワーカーの計算モードが示されます。

[Ycomposite,...] = sim(net,Xcomposite,...) は Composite データを取り、Composite の結果を返します。Composite データが使用される場合、'useParallel' が自動的に 'yes' に設定されます。

[Ygpu,...] = sim(net,Xgpu,...) は gpuArray データを取り、gpuArray の結果を返します。gpuArray データが使用される場合、'useGPU' が自動的に 'yes' に設定されます。

例

次の例では、ニューラル ネットワーク オブジェクト (net) を関数として呼び出すことによって、関数 sim が暗黙的に呼び出されます。

フィードフォワード ネットワークのシミュレーション

この例では、解剖学的測定値 x を体脂肪率 t にマッピングするデータセットを読み込みます。10 個のニューロンがあるフィードフォワード ネットワークが作成され、このデータで学習が行われた後、シミュレーションが行われます。

[x,t] =  bodyfat_dataset;  
net = feedforwardnet(10);
net = train(net,x,t);

Figure Neural Network Training (21-Jul-2026 08:55:04) contains an object of type uigridlayout.

y = net(x);

アルゴリズム

sim は、次のプロパティを使用して、ネットワーク net のシミュレーションを行います。

net.numInputs, net.numLayers
net.outputConnect, net.biasConnect
net.inputConnect, net.layerConnect

これらのプロパティによって、ネットワークの重みとバイアスの値、および各重みに関連付けられた遅延の数が決定されます。

net.IW{i,j}
net.LW{i,j}
net.b{i}
net.inputWeights{i,j}.delays
net.layerWeights{i,j}.delays

次の関数プロパティは、sim が重みとバイアスの値を入力に適用し、各層の出力を得る方法を示します。

net.inputWeights{i,j}.weightFcn
net.layerWeights{i,j}.weightFcn
net.layers{i}.netInputFcn
net.layers{i}.transferFcn

バージョン履歴

R2006a より前に導入

すべて折りたたむ