主要内容

sim

(即将删除)仿真神经网络

以后的版本中将会删除 sim。有关详细信息,请参阅Transition Legacy Neural Network Code to dlnetwork Workflows

有关更新代码的建议,请参阅版本历史记录

语法

[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 通常通过将神经网络作为函数调用来隐式调用。例如,以下两个表达式返回相同的结果:

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

请注意,参量 XiAi, XfAf 是可选项,只有在有输入或层延迟的网络中会用到。

信号参量可以有两种格式:元胞数组或矩阵。

元胞数组格式最容易描述。对于具有多个输入和输出的网络来说,这种格式最方便,并允许呈现输入序列:

X

Ni×TS 元胞数组

每个元素 X{i,ts} 是一个 Ri×Q 矩阵。

Xi

Ni×ID 元胞数组

每个元素 Xi{i,k} 是一个 Ri×Q 矩阵。

Ai

Nl×LD 元胞数组

每个元素 Ai{i,k} 是一个 Si×Q 矩阵。

T

No×TS 元胞数组

每个元素 X{i,ts} 是一个 Ui×Q 矩阵。

Y

No×TS 元胞数组

每个元素 Y{i,ts} 是一个 Ui×Q 矩阵。

Xf

Ni×ID 元胞数组

每个元素 Xf{i,k} 是一个 Ri×Q 矩阵。

Af

Nl×LD 元胞数组

每个元素 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

XiAiXfAf 的列按最早延迟条件到最近延迟条件排序:

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

如果要只仿真一个时间步 (TS = 1),可以使用矩阵格式。这对于只有一个输入和输出的网络很方便,但也可用于有更多输入和输出的网络。

每个矩阵参量都是通过将对应元胞数组参量的元素以单精度矩阵形式存储来得出的:

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) 用于使用元胞数组表示法时没有输入的网络。

[Y,...] = sim(net,...,'useParallel',...)[Y,...] = sim(net,...,'useGPU',...)[Y,...] = sim(net,...,'showResources',...)(或作为函数调用的网络)接受可选的名称/值对组参量来控制计算的执行方式。如果 Parallel Computing Toolbox 可用,其中两个选项允许使用并行工作单元或 GPU 设备更快地进行训练或基于更大的数据集进行训练。以下是可选的名称/值对组:

'useParallel','no'

计算在普通 MATLAB 线程上进行。这是默认 'useParallel' 设置。

'useParallel','yes'

如果并行池处于打开状态,计算将在并行工作单元上进行。否则,计算将在普通 MATLAB 线程上进行。

'useGPU','no'

计算在 CPU 上进行。这是默认 'useGPU' 设置。

'useGPU','yes'

如果当前 gpuDevice 是受支持的 GPU,则在其上进行计算(请参阅 Parallel Computing Toolbox 了解 GPU 要求)。如果当前 gpuDevice 不受支持,则计算仍在 CPU 上进行。如果 'useParallel' 也是 'yes',并且并行池处于打开状态,则每个具有独占 GPU 的工作单元都会使用该 GPU,其他工作单元则在其各自的 CPU 内核上运行计算。

'useGPU','only'

如果没有并行池处于打开状态,则此设置与 'yes' 相同。如果有并行池处于打开状态,则仅使用具有独占 GPU 的工作单元。但是,如果一个并行池处于打开状态但没有可用的受支持 GPU,则计算仍会在所有工作单元 CPU 上执行。

'showResources','no'

在命令行中不显示使用的计算资源。这是默认设置。

'showResources','yes'

在命令行中显示实际使用的计算资源的摘要。如果请求了并行或 GPU 计算,但并行池未打开或受支持的 GPU 不可用,则实际资源可能与请求的资源不同。使用并行工作单元时,系统会描述每个工作单元的计算模式,包括池中未使用的工作单元。

[Ycomposite,...] = sim(net,Xcomposite,...) 接受合成数据并返回合成结果。如果使用合成数据,则 '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 (24-Jan-2026 18:16:30) 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 之前推出

全部折叠