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