Многоступенчатый прогноз нейронной сети

Настройте в режиме разомкнутого цикла

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