Динамические сети с обратной связью, такой как narxnet
и narnet
нейронные сети, может быть преобразован между разомкнутыми и замкнутыми контурами обратной связи с функциями openloop
и closeloop
. Сети с обратной связью делают многошаговые прогнозирования. Другими словами, они продолжают предсказывать, когда внешняя обратная связь отсутствует, при помощи внутренней обратной связи.
Здесь нейронная сеть обучена, чтобы смоделировать систему магнитной левитации и симулирована в режиме разомкнутого контура по умолчанию.
[X,T] = maglev_dataset; net = narxnet(1:2,1:2,10); [x,xi,ai,t] = preparets(net,X,{},T); net = train(net,x,t,xi,ai); y = net(x,xi,ai); view(net)
Нейронная сеть может также быть симулирована только в форме с обратной связью, так, чтобы, учитывая внешний входной ряд и начальные условия, нейронная сеть выполнила столько предсказаний, сколько входной ряд имеет временные шаги.
netc = closeloop(net); view(netc)
Здесь обучающие данные используются, чтобы задать входные параметры x
, и начальный вход и слой задерживают состояния, xi
и ai
, но они могут быть заданы, чтобы сделать несколько предсказаний для любого входного ряда и начальных состояний.
[x,xi,ai,t] = preparets(netc,X,{},T); yc = netc(x,xi,ai);
Это может также быть полезно симулировать обученную нейронную сеть подарок со всеми известными значениями timeseries в режиме разомкнутого контура, затем переключиться на режим с обратной связью, чтобы продолжить симуляцию для стольких предсказаний в будущее, сколько желаемы.
Так же, как openloop
и closeloop
может использоваться, чтобы преобразовать между открытым - и нейронными сетями с обратной связью, они могут преобразовать состояние открытых - и сети с обратной связью. Вот полные интерфейсы для этих функций.
[open_net,open_xi,open_ai] = openloop(closed_net,closed_xi,closed_ai); [closed_net,closed_xi,closed_ai] = closeloop(open_net,open_xi,open_ai);
Рассмотрите случай, где у вас может быть запись поведения Магнитной левитации для 20 временных шагов, и вы хотите предсказать вперед для еще 20 временных шагов.
Во-первых, задайте первые 20 шагов входных параметров и целей, представляя 20 временных шагов, где известный выход задан целями t
. Со следующими 20 временными шагами входа заданы, используют сеть, чтобы предсказать эти 20 выходных параметров с помощью каждой ее обратной связи предсказаний, чтобы помочь сети выполнить следующее предсказание.
x1 = x(1:20); t1 = t(1:20); x2 = x(21:40);
Нейронная сеть разомкнутого контура затем симулирована на этих данных.
[x,xi,ai,t] = preparets(net,x1,{},t1); [y1,xf,af] = net(x,xi,ai);
Теперь итоговые состояния ввода и состояния слоя, возвращенные сетью, преобразованы в форму с обратной связью наряду с сетью. Итоговые состояния ввода xf
и состояния слоя af
из разомкнутого контура сеть становятся начальными состояниями ввода xi
и состояния слоя ai
из сети с обратной связью.
[netc,xi,ai] = closeloop(net,xf,af);
Обычно используйте preparets
задавать начальные состояния ввода и состояния слоя. Поскольку они были уже получены из конца симуляции разомкнутого контура, вам не нужно preparets
продолжать 20 предсказаний шага сети с обратной связью.
[y2,xf,af] = netc(x2,xi,ai);
Обратите внимание на то, что можно установить x2
к различным последовательностям входных параметров, чтобы протестировать различные сценарии на однако много временных шагов требуется сделать предсказания. Например, чтобы предсказать поведение системы магнитной левитации, если 10 случайных входных параметров используются:
x2 = num2cell(rand(1,10)); [y2,xf,af] = netc(x2,xi,ai);
Если после симуляции сети в форме с обратной связью, можно продолжить симуляцию оттуда в форме разомкнутого контура. Здесь состояние с обратной связью преобразовано назад в состояние разомкнутого контура. (Вы не должны преобразовывать сеть назад в форму разомкнутого контура, когда у вас уже есть исходная сеть разомкнутого контура.)
[~,xi,ai] = openloop(netc,xf,af);
Теперь можно задать продолжения внешнего входа и обратной связи разомкнутого контура, и симулировать сеть разомкнутого контура.
x3 = num2cell(rand(2,10)); y3 = net(x3,xi,ai);
Таким образом можно переключить симуляцию между разомкнутым контуром и способами с обратной связью. Одно приложение для этого делает предсказания timeseries датчика, где последнее значение датчика обычно известно, позволяя предсказание разомкнутого контура следующего шага. Но в некоторых случаях чтение датчика не доступно, или известное быть ошибочным, требуя шага предсказания с обратной связью. Предсказания могут чередоваться между разомкнутым контуром и формой с обратной связью, в зависимости от доступности чтения датчика последнего шага.