sim

Симулируйте нейронную сеть

Синтаксис

[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

Ni-by- TS массив ячеек

Каждый элемент X{i,ts} является Ri-by- Q матрица.

Xi

Ni-by- ID массив ячеек

Каждый элемент Xi{i,k} является Ri-by- Q матрица.

Ai

Nl-by- LD массив ячеек

Каждый элемент Ai{i,k} является Si-by- Q матрица.

T

No-by- TS массив ячеек

Каждый элемент X{i,ts} является Ui-by- Q матрица.

Y

No-by- TS массив ячеек

Каждый элемент Y{i,ts} является Ui-by- Q матрица.

Xf

Ni-by- ID массив ячеек

Каждый элемент Xf{i,k} является Ri-by- Q матрица.

Af

Nl-by- LD массив ячеек

Каждый элемент Af{i,k} является Si-by- 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}=

Входные i во время ts = k - ID

Xf{i,k}=

Входные i во время ts = TS + k - ID

Ai{i,k}=

Слой вывода i во время ts = k - LD

Af{i,k}=

Слой вывода i во время ts = TS + k - LD

Матричный формат может использоваться, если необходимо моделировать только один временной шаг  (TS = 1). Он удобен для сетей только с одним входом и выходом, но может использоваться и с сетями, которые имеют больше.

Каждый матричный аргумент найден путем хранения элементов соответствующего аргумента массива ячеек в одной матрице:

X

(sum of Ri)-by- Q матрица

Xi

(sum of Ri)-by- (ID*Q) матрица

Ai

(sum of Si)-by- (LD*Q) матрица

T

(sum of Ui)-by- Q матрица

Y

(sum of Ui)-by- Q матрица

Xf

(sum of Ri)-by- (ID*Q) матрица

Af

(sum of Si)-by- (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. Это необязательные пары имя/значение:

'useParallel','no'

Вычисления происходят на нормальном потоке MATLAB. Это значение по умолчанию 'useParallel' настройка.

'useParallel','yes'

Вычисления происходят на параллельных рабочих местах, если параллельный пул открыт. В противном случае вычисления выполняются в обычном потоке MATLAB.

'useGPU','no'

Вычисления выполняются на центральный процессор. Это параметр по умолчанию 'useGPU'.

'useGPU','yes'

Вычисления происходят на текущем gpuDevice, если он является поддерживаемым графическим процессором (См. Parallel Computing Toolbox для требований к GPU.) Если текущее gpuDevice не поддерживается, вычисления остаются на центральном процессоре. Если 'useParallel' также 'yes' и параллельный пул открыт, затем каждый рабочий процесс с уникальным графическим процессором использует этот графический процессор, другие рабочие выполняют вычисления на своих соответствующих центральных процессорах ядрах.

'useGPU','only'

Если параллельный пул не открыт, этот параметр аналогичен 'yes'. Если параллельный пул открыт, то используются только работники с уникальными графическими процессорами. Однако, если параллельный пул открыт, но поддерживаемые графические процессоры недоступны, вычисления возвращаются к выполнению на всех рабочих центральных процессорах.

'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);

Симулируйте сети временных рядов NARX

Этот пример обучает разомкнутой нелинейно-авторегрессивной сети с внешним входом, чтобы смоделировать левитированную магнитную систему, заданную управляющим током 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

См. также

| | |

Представлено до R2006a