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

Настройка в Разомкнутый контур режиме

Динамические сети с обратной связью, такие как 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);

Таким образом, можно переключить симуляцию между разомкнутым контуром и замкнутыми способами. Одним из приложений для этого является создание временных предсказаний датчика, где последнее значение датчика обычно известно, что позволяет предсказать разомкнутый разомкнутый контур следующего шага. Но в некоторых случаях показания датчика недоступны или, как известно, ошибочны, требуя шага предсказания с обратной связью. Предсказания могут чередоваться между разомкнутой и замкнутой формами, в зависимости от доступности чтения датчика последнего шага.