Моделирование нейронной сети
[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, если он является поддерживаемым графическим процессором (требования к графическому процессору см. в разделе Панель инструментов параллельных вычислений). Если текущий gpuDevice не поддерживается, вычисления остаются на ЦП. Если |
'useGPU','only' | Если параллельный пул не открыт, этот параметр совпадает с |
'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);
Этот пример обучает нелинейную авторегрессионную сеть с разомкнутым контуром с внешним входом моделировать левитированную магнитную систему, определяемую током управления. 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