Симулируйте нейронную сеть
[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 для требований к GPU.) Если текущее 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 вы можете моделировать и обучать сети быстрее и на больших наборах данных, чем помещается на одном ПК. Здесь обучение и симуляция происходят между параллельными работниками MATLAB.
parpool [X,T] = vinyl_dataset; net = feedforwardnet(10); net = train(net,X,T,'useParallel','yes','showResources','yes'); Y = net(X,'useParallel','yes');
Используйте Композитные значения, чтобы распределить данные вручную и получить результаты как Составные значения. Если данные загружаются по мере их распределения, то в то время как каждый фрагмент набора данных должен помещаться в ОЗУ, набор данных в целом ограничивается только общей ОЗУ всех работников.
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