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