Выполним проверку сети, используя входную последовательность обучающего подмножества и сравнивая выход сети с фактическим значением сигнала T (рис. 9.5):
Q1 = 40;
a = sim(net,P1(:,1:Q1));
t1 = 6:Q1+5;
plot(time(t1),a,'*r', time(1:Q1+5),T(1,1:Q1+5))
xlabel('Time, c');
Рис. 9.5
Как следует из анализа этого рисунка, нейронная сеть достаточно точно отслеживает входной сигнал.
Теперь проверим работу сети, используя контрольное множество T2. Определим длину входной последовательности N1, равную 20, и построим график реакции сети (рис. 9.6):
N1 = 20;
Tt = T2(1,1:N1);
P2(1,:) = Tt(1,:);
P2(2,2:end) = Tt(1,1:end–1);
P2(3,3:end) = Tt(1,1:end–2);
P2(4,4:end) = Tt(1,1:end–3);
P2(5,5:end) = Tt(1,1:end–4);
a = sim(net,P2);
figure(3), clf
h1 = plot(time(1:size(P2, 2)–5), a(1:end–5), '*'); hold on
h2 = plot(time(1:size(P2, 2)–5), Tt(6:end), 'r');
Рис. 9.6
Вычислим погрешность сети, используя информацию из описания графических
объектов Line с дескрипторами h1 и h2:
y1 = get(h1,'YData'); y2 = get(h2,'YData');
minlength = min(length(y1), length(y2));
e = y1(1:minlength) – y2(1:minlength);
nre = sqrt(mse(e));
График погрешности экстраполяции в функции от длины обучающего сигнала и в зависимости от количества точек экстраполяции в качестве параметра показан на рис. 9.7.
|
|
Рис. 9.7
Из анализа этого графика следует, что при малом числе экстраполируемых точек 6, 8 и длительности обучающей последовательности более 0.1 с погрешности малы. С ростом числа экстраполируемых точек 10, 20, 30 требуется большая длина обучающей последовательности, и при длине, превышающей 20 тактов (0.5 с), погрешность не зависит от числа точек экстраполяции и монотонно убывает с увеличением длины обучающего множества.
Читатель может обратиться к демонстрационному примеру applin1, где исследуется подобная задача.