exponenta event banner

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около-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

Столбцы 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)около-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. Это необязательные пары имя/значение:

'useParallel','no'

Вычисления выполняются в обычном потоке MATLAB. Это значение по умолчанию 'useParallel' установка.

'useParallel','yes'

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

'useGPU','no'

Вычисления выполняются на ЦП. Это параметр useGPU по умолчанию.

'useGPU','yes'

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

'useGPU','only'

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

'showResources','no'

Не отображать вычислительные ресурсы, используемые в командной строке. Это параметр по умолчанию.

'showResources','yes'

Отображение в командной строке сводки фактически используемых вычислительных ресурсов. Фактические ресурсы могут отличаться от запрашиваемых ресурсов, если запрашиваются параллельные вычисления или вычисления GPU, но параллельный пул не открыт или поддерживаемый GPU недоступен. При использовании параллельных работников описывается режим вычислений каждого работника, включая работников в пуле, которые не используются.

[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