В этом примере показано, как адаптивный линейный слой может научиться предсказывать следующее значение в сигнале, учитывая текущее и последние четыре значения.
Сведения о том, как прогнозировать данные временных рядов с помощью сети глубокого обучения, см. в разделе Прогнозирование временных рядов с использованием глубокого обучения.
Здесь два временных сегмента определяются от 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');

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