exponenta event banner

Адаптивное линейное прогнозирование

В этом примере показано, как адаптивный линейный слой может научиться предсказывать следующее значение в сигнале, учитывая текущее и последние четыре значения.

Сведения о том, как прогнозировать данные временных рядов с помощью сети глубокого обучения, см. в разделе Прогнозирование временных рядов с использованием глубокого обучения.

Определение формы волны

Здесь два временных сегмента определяются от 0 до 6 секунд с шагом 1/40 секунды.

time1 = 0:0.025:4;      % from 0 to 4 seconds
time2 = 4.025:0.025:6;  % from 4 to 6 seconds
time = [time1 time2];  % from 0 to 6 seconds

Вот сигнал, который начинается на одной частоте, но затем переходит на другую частоту.

signal = [sin(time1*4*pi) sin(time2*8*pi)];
plot(time,signal)
xlabel('Time');
ylabel('Signal');
title('Signal to be Predicted');

Настройка проблемы для нейронной сети

Затем преобразование сигнала преобразуется в матрицу ячеек. Нейронные сети представляют временные интервалы в виде столбцов массива ячеек, выделяют их из различных выборок в данный момент времени, которые представлены столбцами матриц.

signal = con2seq(signal);

Для решения проблемы мы будем использовать первые пять значений сигнала в качестве начальных состояний задержки на входе, а остальные - для входов.

Xi = signal(1:5);
X = signal(6:end);
timex = time(6:end);

Теперь цели определяются в соответствии с входными данными. Сеть должна прогнозировать текущий вход, используя только последние пять значений.

T = signal(6:end);

Создание линейного слоя

Функциональный линейный слой создает линейный слой с одним нейроном с задержкой отвода последних пяти входов.

net = linearlayer(1:5,0.1);
view(net)

Адаптация линейного слоя

The function *adapt* simulates the network on the input, while
adjusting its weights and biases after each timestep in response
to how closely its output matches the target.
It returns the update networks, it outputs, and its errors.
[net,Y] = adapt(net,X,T,Xi);

Выходной сигнал наносится на график вместе с целями.

figure
plot(timex,cell2mat(Y),timex,cell2mat(T),'+')
xlabel('Time');
ylabel('Output -  Target +');
title('Output and Target Signals');

Ошибка также может быть выведена на печать.

figure
E = cell2mat(T)-cell2mat(Y);
plot(timex,E,'r')
hold off
xlabel('Time');
ylabel('Error');
title('Error Signal');

Обратите внимание, насколько мала ошибка, за исключением начальных ошибок, и сеть узнает поведение системы в начале и после перехода системы.

Этот пример иллюстрирует, как смоделировать адаптивную линейную сеть, которая может предсказать следующее значение сигнала по текущим и прошлым значениям, несмотря на изменения в поведении сигналов.