模拟神经网络
(Y, Xf, Af) = sim(净,X, Xi, Ai, T)
[Y,Xf,Af] = sim(net,{Q TS},Xi,Ai)
[Y,…] = sim(净,…,useParallel,…)
[Y,…] = sim(净,…,useGPU,…)
[Y,…] = sim(净,…,showResources,…)
[Ycomposite,…] = sim(净、Xcomposite…)
[Ygpu,…] = sim(净、Xgpu…)
类型帮助网络/ sim
.
sim卡
模拟神经网络。
(Y, Xf, Af) = sim(净,X, Xi, Ai, T)
需要
净 |
网络 |
X |
网络的输入 |
西 |
初始输入延迟条件(默认为零) |
人工智能 |
初始层延迟条件(默认为零) |
T |
网络目标(默认值= 0) |
并返回
Y |
网络输出 |
Xf |
最终输入延迟条件 |
房颤 |
最终层延迟条件 |
sim卡
通常通过将神经网络作为函数调用来隐式调用。例如,这两个表达式返回相同的结果:
Y = sim(net,x,xi,ai)
请注意,参数西
,人工智能
,Xf
,房颤
是可选的,只需要用于具有输入或层延迟的网络。
信号参数可以有两种格式:单元格数组或矩阵。
单元格数组格式是最容易描述的。对于有多个输入和输出的网络,它是最方便的,并且允许输入序列呈现:
X |
|
每个元素 |
西 |
|
每个元素 |
人工智能 |
|
每个元素 |
T |
|
每个元素 |
Y |
|
每个元素 |
Xf |
|
每个元素 |
房颤 |
|
每个元素 |
在哪里
倪 |
= | net.numInputs |
问 |
= | net.numLayers |
没有 |
= | net.numOutputs |
ID |
= | net.numInputDelays |
LD |
= | net.numLayerDelays |
TS |
= | 时间步长 |
问 |
= | 批量大小 |
国际扶轮 |
= | net.inputs{我}.size |
如果 |
= | net.layers{我}.size |
用户界面 |
= | net.outputs{我}.size |
的列西
,人工智能
,Xf
,房颤
从最古老的延迟条件到最近的:
习{i、k} |
= | 输入 |
Xf {i、k} |
= | 输入 |
Ai {i、k} |
= | 层的输出 |
房颤{i、k} |
= | 层的输出 |
如果只模拟一个时间步长,可以使用矩阵格式(t = 1)
.它对只有一个输入和输出的网络很方便,但也可以用于有更多输入和输出的网络。
每个矩阵参数是通过在一个矩阵中存储相应的cell array参数的元素来找到的:
X |
|
西 |
|
人工智能 |
|
T |
|
Y |
|
Xf |
|
房颤 |
|
[Y,Xf,Af] = sim(net,{Q TS},Xi,Ai)
在使用单元格数组表示法时,用于没有输入的网络。
[Y,…] = sim(净,…,useParallel,…)
,[Y,…] = sim(净,…,useGPU,…)
,或[Y,…] = sim(净,…,showResources,…)
(或作为函数调用的网络)接受可选的名称/值对参数来控制如何执行计算。如果并行计算工具箱可用,其中两个选项允许使用并行工作器或GPU设备进行更快的训练或在更大的数据集上进行训练。以下是可选的名称/值对:
“useParallel”、“不” |
计算在普通的MATLAB线程上进行。这是默认值 |
“useParallel”,“是的” |
如果打开并行池,则会在并行工作器上进行计算。否则,计算将在正常的MATLAB线程上进行。 |
“useGPU”、“不” |
CPU进行计算。这是默认的useGPU设置。 |
“useGPU”,“是的” |
如果当前gpuDevice是支持的GPU,则会在当前gpuDevice上进行计算(有关GPU需求,请参阅并行计金宝app算工具箱)。如果不支持当前的gpuDevice,则CPU仍需进行计算。金宝app如果 |
“useGPU”、“只” |
如果没有打开并行池,则此设置与 |
“showResources”、“不” |
请勿在命令行显示所使用的计算资源。这是默认设置。 |
“showResources”,“是的” |
在命令行显示实际使用的计算资源的摘要。如果请求并行或GPU计算,但未打开并行池或支持的GPU不可用,则实际资源可能与请求的资源不一致。金宝app当使用并行worker时,描述每个worker的计算模式,包括池中未使用的worker。 |
[Ycomposite,…] = sim(净、Xcomposite…)
获取Composite数据并返回Composite结果。如果使用Composite数据,则“useParallel”
自动设置为“是的”
.
[Ygpu,…] = sim(净、Xgpu…)
获取gpuArray数据并返回gpuArray结果。如果使用gpuArray数据,则“useGPU”
自动设置为“是的”
.
在下面的例子中sim卡
函数通过调用神经网络对象(净
)作为函数。
这个示例加载一个映射解剖测量的数据集x
身体脂肪百分比t
.一个由10个神经元组成的前馈网络被创建,并根据这些数据进行训练,然后进行模拟。
[x, t] = bodyfat_dataset;网= feedforwardnet (10);网=火车(净,x, t);y =净(x);
这个例子训练了一个有外部输入的开环非线性自回归网络,以模拟一个由控制电流定义的悬浮磁体系统x
以及磁铁的垂直位置响应t
,然后模拟网络。这个函数preparets
在训练和模拟前准备数据。它创造了开环网络的综合输入xo
,它包含两个外部输入x
和之前的位置值t
.它还准备延迟状态西
.
[x, t] = maglev_dataset;网= narxnet (10);[xo, xi, ~,] = preparets(净,x, {}, t);网=火车(净,xo,ξ);y =净(xo, xi)
同样的系统也可以用闭环形式进行模拟。
netc = closeloop(净);视图(netc) (xcξ,人工智能,tc) = preparets (netc, x, {}, t);yc = netc (xcξ,ai);
使用并行计算工具箱,您可以模拟和训练网络更快和更大的数据集比可以在一台PC上。在这里,培训和仿真是在并行的MATLAB工作者之间进行的。
parpool [X,T] = vinyl_dataset;网= feedforwardnet (10);网=火车(净,X, T,‘useParallel’,‘是的’,‘showResources’,‘是的’);净(Y = X,‘useParallel’,‘是的’);
使用Composite值手动分发数据,并以Composite值的形式返回结果。如果数据是在分布时加载的,那么数据集的每一部分都必须适合RAM,而整个数据集仅受所有工作人员的总RAM的限制。
Xc =复合;for i=1:numel(Xc) Xc{i} = X+rand(size(X))*0.1;%使用真实数据而不是随机数据结束Yc = net(Xc,'showResources','yes');
如果支持并行计算工具箱,可以使用当前的GPU设备来模拟网络。金宝app
gpuDevice %检查是否有支持的GPU Y = net(X金宝app,'useGPU','yes','showResources','yes');
手动将数据放到GPU上,并在GPU上得到结果:
Xgpu = gpuArray (X);Ygpu =净(Xgpu showResources, '是的');Y =收集(Ygpu);
为了并行运行,与唯一gpu相关联的worker可以利用该硬件,而其他worker使用cpu:
净(Y = X,‘useParallel’,‘是的’,‘useGPU’,‘是的’,‘showResources’,‘是的’);
只使用具有唯一gpu的worker可能会导致更高的速度,因为CPU worker可能跟不上。
净(Y = X,‘useParallel’,‘是的’,‘useGPU’,‘只’,‘showResources’,‘是的’);
sim卡
使用这些属性来模拟网络净
.
net.numInputs,net.numLayers网。outputConnect,净。biasConnect网。我nputConnect, net.layerConnect
这些属性决定了网络的权值和偏差值以及与每个权值相关的延迟数:
网。IW {i, j}。LW {i, j}。我{}net.inputWeights {i, j} .delays net.layerWeights {i, j} .delays
这些函数属性说明了如何操作sim卡
将权重和偏差值应用于输入以获得每一层的输出:
net.inputWeights {i, j}。weightFcn net.layerWeights {i, j}。weightFcn net.layers{我}.netInputFcn net.layers{我}.transferFcn