Симулируйте нейронную сеть
[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)
Обратите внимание на то, что аргументы Xi
, Ai
, Xf
, и Af
являются дополнительными и должными являются только использоваться для сетей, которые ввели или задержки слоя.
Аргументы сигнала могут иметь два формата: массив ячеек или матрица.
Формат массива ячеек является самым легким описать. Это является самым удобным для сетей с несколькими вводами и выводами и позволяет последовательностям входных параметров быть представленными:
X |
| Каждый элемент |
Xi |
| Каждый элемент |
Ai |
| Каждый элемент |
T |
| Каждый элемент |
Y |
| Каждый элемент |
Xf |
| Каждый элемент |
Af |
| Каждый элемент |
где
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} | = | Введите |
Xf{i,k} | = | Введите |
Ai{i,k} | = | Слой выход |
Af{i,k} | = | Слой выход |
Матричный формат может использоваться, если только одним временным шагом должен быть симулированный (TS = 1)
. Это удобно для сетей только с одним вводом и выводом, но может также использоваться с сетями, которые имеют больше.
Каждый матричный аргумент найден путем хранения элементов соответствующего аргумента массива ячеек в одной матрице:
X |
|
Xi |
|
Ai |
|
T |
|
Y |
|
Xf |
|
Af |
|
[Y,Xf,Af] = sim(net,{Q TS},Xi,Ai)
используется для сетей, которые не имеют входа, когда обозначение массива ячеек используется.
[Y,...] = sim(net,...,'useParallel',...)
, [Y,...]
= sim(net,...,'useGPU',...)
, или [Y,...] = sim(net,...,'showResources',...)
(или сеть, названная как функция), принимает, что дополнительные аргументы пары имя/значение управляют, как выполняются вычисления. Две из этих опций позволяют обучению произойти быстрее или на больших наборах данных с помощью параллельных рабочих или устройств графического процессора, если Parallel Computing Toolbox доступен. Это дополнительные пары имя/значение:
'useParallel','no' | Вычисления происходят на нормальном потоке MATLAB. Это - |
'useParallel','yes' | Вычисления происходят на параллельных рабочих, если параллельный пул открыт. В противном случае вычисления происходят на нормальном потоке MATLAB. |
'useGPU','no' | Вычисления происходят на центральном процессоре. Это - значение по умолчанию 'useGPU' установка. |
'useGPU','yes' | Вычисления происходят на текущем gpuDevice, если это - поддерживаемый графический процессор (См. Parallel Computing Toolbox для требований графического процессора.), Если текущий gpuDevice не поддерживается, вычисления остаются на центральном процессоре. Если |
'useGPU','only' | Если никакой параллельный пул не открыт, то эта установка совпадает с |
'showResources','no' | Не отображайте вычислительные ресурсы, используемые в командной строке. Это - настройка по умолчанию. |
'showResources','yes' | Покажите в командной строке сводные данные вычислительных ресурсов, на самом деле используемых. Фактические ресурсы могут отличаться от требуемых ресурсов, если вычисление параллели или графического процессора требуют, но параллельный пул не открыт, или поддерживаемый графический процессор не доступен. Когда параллельные рабочие используются, режим расчета каждого рабочего описан, включая рабочих в пуле, которые не используются. |
[Ycomposite,...] = sim(net,Xcomposite,...)
берет Составные данные и возвращает Составные результаты. Если Составные данные используются, то 'useParallel'
автоматически установлен в 'yes'
.
[Ygpu,...] = sim(net,Xgpu,...)
берет gpuArray данные и возвращает gpuArray результаты. Если gpuArray данные используются, то 'useGPU'
автоматически установлен в 'yes'
.
В следующих примерах, sim
функция вызвана неявно путем вызова объекта нейронной сети (net
) как функция.
Этот пример загружает набор данных, который сопоставляет анатомические измерения x
к содержаниям жира в организме t
. Сеть прямого распространения с 10 нейронами создана и обучена на тех данных, затем симулировала.
[x,t] = bodyfat_dataset; net = feedforwardnet(10); net = train(net,x,t); y = net(x);
Этот пример обучает разомкнутый контур нелинейно-авторегрессивная сеть с внешним входом, чтобы смоделировать поднимаемую магнитную систему, заданную управлением текущий x
и ответ вертикального положения магнита t
, затем симулирует сеть. Функция preparets
готовит данные перед обучением и симуляцией. Это создает объединенные входные параметры сети разомкнутого контура xo
, который содержит обоих внешний вход x
и предыдущие значения положения t
. Это также готовится, задержка утверждает xi
.
[x,t] = maglev_dataset; net = narxnet(10); [xo,xi,~,to] = preparets(net,x,{},t); net = train(net,xo,to,xi); y = net(xo,xi)
Эта та же система может также быть симулирована в форме с обратной связью.
netc = closeloop(net); view(netc) [xc,xi,ai,tc] = preparets(netc,x,{},t); yc = netc(xc,xi,ai);
С Parallel Computing Toolbox можно симулировать и обучить нейронные сети быстрее и на больших наборах данных, чем может соответствовать на одном PC. Здесь обучение и симуляция происходят через параллельных работников MATLAB.
parpool [X,T] = vinyl_dataset; net = feedforwardnet(10); net = train(net,X,T,'useParallel','yes','showResources','yes'); Y = net(X,'useParallel','yes');
Используйте Составные значения, чтобы распределить данные вручную и возвратить результаты как Составное значение. Если данные загружаются, когда они распределяются, то, в то время как каждая часть набора данных должна поместиться в RAM, набор данных в целом ограничивается только общим RAM всех рабочих.
Xc = Composite; for i=1:numel(Xc) Xc{i} = X+rand(size(X))*0.1; % Use real data instead of random end Yc = net(Xc,'showResources','yes');
Сети могут быть симулированы с помощью текущего устройства графического процессора, если оно поддерживается Parallel Computing Toolbox.
gpuDevice % Check if there is a supported GPU Y = net(X,'useGPU','yes','showResources','yes');
Поместить данные по графическому процессору вручную и получить результаты на графическом процессоре:
Xgpu = gpuArray(X); Ygpu = net(Xgpu,'showResources','yes'); Y = gather(Ygpu);
Чтобы запуститься параллельно, с рабочими, сопоставленными с помощью уникальных графических процессоров, использующих в своих интересах то оборудование, в то время как остальная часть рабочих используют центральные процессоры:
Y = net(X,'useParallel','yes','useGPU','yes','showResources','yes');
Только Используя рабочих с помощью уникальных графических процессоров может привести к более высоким скоростям, когда рабочие центрального процессора не могут поддержать на высоком уровне.
Y = net(X,'useParallel','yes','useGPU','only','showResources','yes');
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