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

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

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