Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Нейронные сети Лаба 2

.pdf
Скачиваний:
93
Добавлен:
14.04.2015
Размер:
1.06 Mб
Скачать
S * R S

Как видно из этого графика, для настройки нейронной сети нужно приблизительно 0,5 с., а далее до 4-й секунды сигнал отслеживается с высокой точностью. После мгновенной смены частоты сигнала, нейронная сеть настраивается на новый сигнал уже за 0,25 с. Это обусловлено тем, что частота снимания сигнала возросла вдвое.

В завершение отметим основные достоинства и ограничения линейных

сетей:

Однослойные линейные сети могут решать задачи линейной аппроксимации функций и распознавания образов

Однослойные линейные сети могут быть или рассчитаны непосредственно, или обучены с использованием правила обучения WH. Кроме того, для их обучения могут использоваться процедуры адаптации.

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

Адаптивные линейные сети ADALINE находят широкое практическое применение при построении цифровых фильтров для обработки сигналов.

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

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

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

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

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

2.3Порядок выполнения работы

1.Повторить теоретический материал по линейным нейронным сетям и алгоритмам обучения

2.Провести моделирование линейной нейронной сети

3.Провести обучение параметров линейной нейронной сети

4.Решить задачу наблюдения за нестационарным сигналом при помощи линейной нейронной сети (в соответствии с вариантом задания в таблице 2.1) Меняя значение параметра скорости настройки lr , количество эпох обучения и количество задержек, настроить линейную сеть так, чтобы ошибка была минимальной; описать зависимость результата от данных параметров.

5.Провести анализ полученных результатов.

Таблица 2.1 – Варианты задания

Сигнал

time1=0:0.05:5

time2=5.05:0.025:10

 

1.

y sin(3x) cos(5x);

y cos(5x) sin(4x) 0.5cos(87x);

2.

y cos(5x) sin(4x) 0.5cos(87x);

y sin(x) 0.25sin(12x);

3.

y sin(x) 0.25sin(12x);

y cos(6x) sin(5x) arctan(0.25x);

4.

y cos(6x) sin(5x) arctan(0.25x);

y sin(0.5x) cos(4x);

5.

y sin(0.5x) cos(4x);

y cos(2x) sin(7x) tanh(2x);

6.

y cos(2x) sin(7x) tanh(2x);

y x cos(2x) sin(5x);

7.

y x cos(2x) sin(5x);

y cos(4x) sin(7x) arctan(2x)

8.

y cos(4x) sin(7x) arctan(2x)

y cos(x2 ) sin(2x);

9.

y cos(x2 ) sin(2x);

y cos(5x) sin(2x) 0.35sin(98x);

10.

y cos(5x) sin(2x) 0.35sin(98x);

y sin(0.5x) 0.72sin(4x) 0.25sin(35x);

11.

y sin(0.5x) 0.72sin(4x) 0.25sin(35x);

y sin(x cos(2x)) ;

 

 

 

12.

y sin(x cos(2x)) ;

y cos(2x) sin(8x) 0.23cos(3x);

 

 

 

13.

y cos(2x) sin(8x) 0.23cos(3x);

y 0.75sin(5x) cos(9x);

14.

y 0.75sin(5x) cos(9x);

y cos(2x) sin(10x) 0.65sin(45x);

15.

y cos(2x) sin(10x) 0.65sin(45x);

y sin(3x) cos(5x);

Дополнительные задания:

1.Описать и исследовать поверхности ошибок других критериев обучения и других нейронных сетей.

2.Реализовать Адалину

3.Решить задачу классификации с помощью линейной сети или Адалины.

2.4Содержание отчѐта

1.Название работы;

2.Цель работы

3.Описание используемой нейронной сети и еѐ архитектуры

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

5.Расширенные выводы к лабораторной работе

Приложения:

1.Код рисунка 2.4:

#-*- coding: utf-8 -*- import neurolab as nl import numpy as np import pylab as pl

#Задаём границы и шаг графика: w = np.arange(-2, 2, 0.05)

b = np.arange(-2, 2, 0.05) X,Y = np.meshgrid(w,b)

#Задаём функцию ошибки:

mse = nl.error.MSE()

# Задаём обучающую выборку:

P = array([[1],[-1.2]]) #входной сигнал T = array([[0.5],[1]]) #обучающий сигнал

# Задаём сеть:

net = nl.net.newp([[-1,1]], 1, nl.trans.PureLin())

# Собираем данные об ошибке:

data = np.empty((len(w),len(b))) # массив для значений ошибки

# Для каждого сочетания веса и сдвига for j in range(len(b)):

for i in range(len(w)):

#инициализируем сеть соответствующей парой значений net.layers[ 0].np['w'] = [[w[i]]]

net.layers[ 0].np['b'] = [b[j]]

#вычисляем ошибку полученной сети

e = mse(T - net.sim(P))

# заносим значение в массив data[j][i] = e

# Строим график:

pl.contour(w, b, data, 50) # выводим 50 изолиний pl.grid() # добавляем сетку

pl.colorbar() # добавляем шкалу pl.title('MSE contour') # добавляем заголовок

pl.xlabel('weight') # добавляем метку абсциссы pl.ylabel('bias') # добавляем метку ординаты pl.show() # выводим на экран (для старых версий)

#Добавляем на график найденное сетью оптимальное значение: err = net.train(P,T,goal = 0.000,show = 0)

weight = net.layers[0].np['w'] bias = net.layers[0].np['b'] pl.plot(weight, bias, 'o')

2.Сбор данных о траектории системы

#Переинициализируем сеть

net = nl.net.newp(nl.tool.minmax(P), T.shape[-1], nl.trans.PureLin()) n = 15 # число эпох обучения

err = np.empty(n) # массив для значений ошибки

w,b = [],[] # массивы весов и сдвигов соответственно

#Запускаем n циклов обучения for i in range(n):

#запоминаем веса

w = np.append(w, net.layers[0].np['w']) b = np.append(b, net.layers[0].np['b'])

# проводим одну эпоху обучения

e = net.train(P,T,goal = -1,show = 0, epochs = 2, lr = 0.4*maxlr) err[i] = e[0] # запоминаем ошибку

pl.plot(w,b,'r-o') # выводим на экран

3. Код рисунка 2.5а

Z = data # массив значений ошибки, собранный в приложении 1. fig = pl.figure(2) # создаём новое окно

ax = fig.gca(projection='3d') # получаем оси трёхмерного графика ax.plot_wireframe(X, Y, Z, rstride=1, cstride=1) # выводим на экран данные из приложения 1 в виде проволочной сетки.

ax.plot3D(w, b, err, 'r-o') # выводим на экран данные о траектории системы из приложения 2.

ax.contour(X, Y, Z, zdir='z', offset= 0, stride = 1) # выводим проекцию по направлению z. Она должна совпадать с рисунком 2.4

pl.show()

Для дополнительных сведений см. matplotlib.sourceforge.net/examples/index.html и matplotlib.sourceforge.net/gallery.html