Нейросеревые модели
Изучение сути искусственных нейронных сетей. Векторные пространства. Матрицы и линейные преобразования векторов. Биологический нейрон и его кибернетическая модель. Теорема об обучении персептрона. Линейная разделимость и персептронная представляемость.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 06.06.2012 |
Размер файла | 239,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
initnwb, initzero;
net.adaptFcn - функция адаптации нейронной сети, используемая при вызове метода adapt класса network: adaptwb или trains;
net.adaptParam - параметры функции адаптации, определяемые с помощью команды help(net.adaptFcn);
net.trainFcn - функция обучения нейронной сети, используемая при вызове метода train класса network: trainb, trainbfg, traingbr, trainc, traincgb, traincgt, traincgp, trainngd, traingda, traingdm, traingdx, trainlm, trainoss, trainr, trainrp, trainscg;
net.trainParam - параметры функции обучения, определяемые с помощью команды help(net.trainFcn);
net.performFcn - функция оценки качества обучения, используемая при вызове метода train: mae, mse, msereg, sse;
net.performParam - параметры функции оценки качества обучения, определяемые с помощью команды help(net.performFcn);
net.layers{1}.initFcn - функция инициализации параметров слоя: initnw, initwb;
net.layers{1}.transferFcn - функция активации, которая для линейного слоя должна быть purelin;
net.layers{1}.netInputFcn - функция накопления для слоя: netprod, netsum;
net.biases{1}.initFcn - функция инициализации вектора смещений: initcon, initzero, rands;
net.biases{1}.lean - индикатор настройки: 0 - с помощью метода adapt, 1 - с помощью метода train;
net.biases{1}.learnFcn - функция настройки вектора смещений: learncon, learngd, learngdm, learnnp, learnwh;
net.biases{1}.learnParam - параметры функции настройки, определяемые с помощью команды help.(net.biases{1}.learnFcn);
net.inputWeights{1, 1}.initFcn - функция инициализации весов входа: initzero, midpoint, randnc, randnr, rands;
net.inputWeights{1,1}.learn - индикатор настройки: 0 - с помощью метода adapt, 1 - с помощью метода train;
net.inputWeights{1,1}.learnFcn - функция настройки весов: learngd, learngdm, learnhd, learnis, learnk, learnlv1, learnlv2, learnos, learnnp, learnpn, learnsom, learnnwh;
net.inputWeights{1,1}.learnParam - параметры функции настройки, определяемые с помощью команды help(net.inputWeights {1,1}.learnParam);
net.inputWeights{1,1}.weightFcn - функция для вычисления взвешенных входов для слоя: dist, dotprod, mandist,negdist, normprod;
для многослойных сетей параметры net.inputWeights{i,j}, связанные с обучением такие, как initFcn, learn, learnFcn, learnParam, weightFcn, имеют тот же смысл и могут принимать такие же значения, что и соответствующие параметры для net.inputWeights{1,1}.
5. Выполнить один цикл адаптации сети с нулевым параметром скорости настройки:
[net1, a, e,] = adapt(net, P, T,);
net1.IW{1,1} % - матрица весов после адаптации;
a % - четыре значения выхода;
e % - четыре значения ошибки.
6. Инициализировать нулями веса входов и смещений и задать параметры скорости настройки для них соответственно 0.2 и 0:
net.IW{1} = [0 0];
net.b{1} = 0;
net.inputWeights{1,1}.learnParm.lr = 0.2;
net.biases{1}.learnParam.lr =0.
Нулевое значение параметра скорости настройки для смещения обусловлено тем, что заданная зависимость 1 2 t = 2 p + p не имеет постоянной составляющей.
7. Выполнить один цикл адаптации с заданным значением параметра скорости адаптации:
[net1, a, e] = adapt (net, P, T);
net1.IW{1,1} % - значения весов в сети net1 изменились;
a % - четыре значения выхода сети net1;
e % - четыре значения ошибки сети net1.
8. Выполнить адаптацию сети net с помощью 30 циклов:
for i = 1:30,
[net, a{i}, e{i}] = adapt(net, P, T);
W(i, :) = net.IW{1,1};
end;
cell2mat(a{30}) % - значения выхода на последнем цикле;
cell2mat(e{30}) % - значение ошибки на последнем цикле;
W(30, :) % - веса после 30 циклов;
mse(cell2mat(e{30}) % - функция ошибок: 0.0017176.
Здесь cell2mat - функция преобразования массива числовых ячеек в массив чисел, а mse - функция среднеквадратичной ошибки.
9. Построить графики зависимости значений выходов сети и весовых коэффициентов, а также среднеквадратичной ошибки от числа циклов, используя функцию subplot для деления экрана на окна: subplot(3,1,1)
for i = 1:1:30, plot(i, cell2mat(a{i}), ?k?),
hold on
end;
xlabel(??), ylabel(?Выходы a(i)?)
grid
subplot(3,1,2)
plot(0:30, [[0 0]; W], ?k?)
xlabel(??), ylabel(?Веса входов W(i) ?)
grid
subplot(3,1,3)
for i = 1:30, E(i) = mse(e{i}); end
semilogy(1:30, E, ?+k?)
xlabel(?Циклы?), ylabel(?Ошибка?), grid
10. Адаптировать рассматриваемую модель статической сети для аппроксимации той же зависимости и с теми же требованиями к погрешности, используя групповой способ представления обучающей последовательности:
P = [-1 -1/3 1/2 1/6; 1 1/4 0 2/3];
T = [-1 -5/12 1 1];
net = newlin([-1 1; -1 1], 1, 0, 0, 0.2);
net = IW{1} = [0 0]; % - присваивание начальных весов;
net.l{1} = 0; % - присваивание начального смещения;
net.inputWeughts{1,1}.learnParam.lr = 0.2;
EE = 10;
i = 1; % - для подсчета количества циклов;
while EE > 0.0017176
[net, a{i}, e{i}, pf] = adapt(net, P, T);
W(i, :) = net .IW{1,1};
EE = mse(e{i});
ee(i) = EE;
i = i + 1;
end;
11. Проанализировать результаты и сделать их сравнение с результатами для последовательного представления обучающей последовательности:
W(63, :)
cell2mat(a{63})
EE = mse(e{63})
mse(e{1})
12. Для полученных результатов построить графики и сравнить их с предыдущими:
subplot(3,1,1)
for i = 1:1:63, plot(i, cell2mat(a{i}), ?k?),
hold on
end;
xlabel(??), ylabel(?Выходы a(i??), grid
subplot(3,1,2)
plot(0:63, [[0 0]; W], ?k?)
xlabel(??), ylabel(?Веса входов W(i)?), grid
subplot(3,1,3)
semilogy(1:63, ee, ?+k?)
xlabel(?Циклы?), ylabel(?Ошибка?), grid
Задание 2. Адаптировать параметры однослойной динамической сети с одним входом и одной линией задержки для аппроксимации рекуррентного соотношения y(t) = 2 p(t) + p(t ?1) , выполнив следующие действия:
1. Так как для динамических сетей групповой способ представления обучающего множества не используется, подготовить данные для последовательной адаптации в виде массивов ячеек значений входа и цели:
P = {-1/2 1/3 1/5 1/4); % - значения входа p(t);
T = {-1 1/6 11/15 7/10}; % - значения цели y(t).
2. Выполнить адаптацию и построение графиков
net = newlin([-1 1], 1, [0 1], 0.5); % - help(newlin);
Pi = {0}; % - начальное условие для линии задержки;
net.IW{1} = [0 0]; % - веса для основного и задержанного входов;
net.biasConnect = 0; % - значение смещения;
EE = 10; i = 1;
while EE > 0.0001
[net, a{i}, e{i}, pf] = adapt(net, P, T);
W(i, :) = net.IW{1,1};
EE = mse(e{i});
ee(i) = EE;
i = i +1;
end
W(22, :)
a{22}
EE
subplot(3,1,1)
for i = 1:1:22, plot(i, cell2mat(a{i}), ?k?)
hold on
end;
xlabel(??), ylabel(?Выходы a(i)?), grid
subplot(3,1,2)
plot(0:22,[[0 0]; W], ?k?)
xlabel(??), ylabel(`Веса входов W(i)?), grid
subplot(3,1,3)
semilogy(1:22, ee, ?+k?)
xlabel(?Циклы ?), ylabel(?Ошибка?)grid
Задание 3. Обучить нейронную сеть, для которой модель и зависимость выхода от входов приведены в задании 1, выполнив команды и используя последовательный и групповой способы представления обучающей последовательности:
а) для последовательного способа:
net=newlin ([-1 1; -1 1], 1, 0, 0);
net.IW{1}= [0 0];
net.b{1} = 0;
P = {[-1 1][-1/3; 1/4][1/2 0][1/6;2/3]};
T = {-1 -5/12 1 1}
net.inputWeights{1, 1}.learnParam.lr = 0.2;
net.biases{1}.learnParam.lr = 0;
net.trainParam.epochs = 30;
net1=train (net,P,T);
W = net1.IW{1} % - параметры после обучения:
Y = sim(net1,p)
EE = mse([Y{:}] - [T{:}]) % - ошибка 1.3817*e-003
б) для группового способа:
P = [-1 -1/3; 1/2 1/6; 1 1/4 0 2/3];
T = [-1 -5/12 1 1]
net1=train (net,P,T);
W = net1.IW{1} % - параметры после обучения:
Y = sim(net1,P)
EE = mse(y-T) % - та же ошибка 1.3817*e-003
Задание 4. Обучить динамическую линейную сеть, рассмотренную во 2-м задании и сравнить результаты, выполнив следующие команды:
net = newlin([-1 1] , 1,[0 1], 0.5)
Pi = {0} % - начальное условие линии задержки;
net.IW{1} = [0 0] % - начальные веса входов;
net.biasConnect = 0; % - смещение отсутствует;
net.trainParam.epochs = 22;
P = {-1/2 1/3 1/5 1/4}; % - вектор входа;
T = {-1 1/6 11/15 7/10}; % - вектор цели;
net1 = train(net, P, T, Pi); % - обучение сети;
W = net1.IW{1} % - веса после обучения сети;
Y = sim(net1, P); % - моделирование новой сети;
EE = mse( [Y{:}] - [T{:}] ) % - ошибка = 3.6514е-005.
Задание 5. Создать и инициализировать трёхслойную сеть с двумя входами для последующего обучения сети методом обратного распространения ошибки, выполнив следующие действия:
1. Создать шаблон сети:
net5 = network(2, ... % - число входов;
3, ... % - число слоёв сети;
[1; 1; 1], ... % - связь смещений;
[1 1 ; 0 0; 0 0], ... % - связь входов;
[ 0 0 0 ; 1 0 0 ; 0 1 0], ... % - связь слоёв;
[0 0 1], ... % - связь выходов;
[0 0 1] ); % - связь целей.
2. Настроить параметры сети для инициализации с помощью алгоритма Нгуена-Видроу для обеспечения возможности использования метода обратного распространения:
net5.initFcn = ?initlay?; % - для сети;
net5.layers{1}.initFcn = ?initnw?; % - для 1-го слоя;
net5.layers{2}.initFcn = ?initnw?; % - для 2-го слоя;
net5.layers{3}.initFcn = ?initnw?; % - для 3-го слоя.
3. Проинициализировать сеть для её последующего обучения методом обратного распространения ошибки:
net5 = init(net5);
net5.IW{1, 1} % - матрица весов для 1-го входа;
net5.IW{1, 2} % - матрица весов для 2-го входа;
net5.LW{2, 1} % - матрица весов для 2-го слоя;
net5.LW{3, 2} % - матрица весов для 3-го слоя;
net5.b{1} % - матрица смещения для 1-го слоя;
net5.b{2} % - матрица смещения для 2-го слоя;
net5.b{3} % - матрица смещения для 3-го слоя.
4. Промоделировать сеть с начальными значениями весов и смещений:
P = [0.5 1 ; 1 0.5]; % - значения входных векторов;
Y = sim(net5) % - моделирование сети.
Задание 6. Создать и инициализировать трёхслойную сеть с двумя входами для последующего обучения различными методами, выполнив следующие действия:
1. Создать шаблон сети, воспользовавшись шаблоном net5:
net6 = net5; % - создание новой копии сети;
net6 = revert(net5); % - возврат к настройке параметров по умолчанию.
2. Настроить параметры сети с помощью функции инициализации нулевых значений весов и смещений initzero:
net6.initFcn = ?initlay?;
net6.layers{1}.initFcn = ?initnw?;
net6.layers{2}.initFcn = ?initnw?;
net6.layers{3}.initFcn = ?initnw?;
net6.inputWeights{1 ,1}.initFcn = ?initzero?;
net6.inputWeights{1 ,2}.initFcn = ?initzero?;
net6.layerWeights{2 ,1}.initFcn = ?initzero?;
net6.layerWeights{3 ,2}.initFcn = ?initzero?;
net6.biases{1}.initFcn = ?initzero?;
net6.biases{2}.initFcn = ?initzero?;
net6.biases{3}.initFcn = ?initzero?;
net6.init(net6); % - инициализация сети.
3. Выдать на экран матрицы весов и смещения, используя команды 3-го пункта 5-го задания.
4. Промоделировать сеть и возвратить её к исходным значениям весов и смещений:
Ynet6 = sim(net6);
net6 = revert(net6).
Задание 7. Создать и инициализировать трёхслойную сеть с двумя входами, используя следующие функции инициализации:
а) rands - для задания случайных весов и смещений.
б) randnc - для задания случайной матрицы с нормированными столбцами;
в) randnv - для задания случайной матрицы с нормированными строками;
г) initcon - для задания равных смещений;
д) midpoint - для задания матрицы средних значений;
Для создания и инициализации сети использовать команды 6-го задания, заменяя в них функцию initzero на рассматриваемые функции инициализации, а сеть net6 - на сеть net7.
Задание 8. Создать двухслойную нейронную сеть с прямой передачей сигнала, одним входом, двумя нейронами в первом слое и одним нейроном во втором слое, настроить сеть для обучения с использованием алгоритма градиентного спуска GD, обучить эту сеть и путём её моделирования оценить качество обучения. Порядок выполнения задания следующий:
1. Создать нейронную сеть с прямой передачей сигнала:
net8 = newff([0 5], …. % - диапазоны значений входа;
[2 1], ….. % - количество нейронов в слоях;
{?tansig?, % - функция активации для 1-го слоя;
?logsig?} % - функция активации для 2-го слоя;
?traingd?); % - имя функции обучения.
2. Убедиться, что веса и смещения каждого слоя инициализированы с помощью алгоритма Нгуена-Видроу:
net8.initFcn % - должно быть ?initlay?;
net8.layers{1}.initFcn % - должно быть ?initnw?;
net8.layers{2}.initFcn % - должно быть ?initnw?;
net8.IW{1,1} % - вес входа;
net8.LW{2,1} % - веса для 2-го слоя.
net8.b{1}
net8.b{2}
3. Задать обучающие последовательности входов и целей T:
P = [0 1 2 3 4 5]; % - вектор входа;
T = [0 0 0 1 1 1]; % - вектор целей.
4. Выдать на экран параметры обучающей функции traingd и их значений по умолчанию:
info = traingd(?pdefaults?)
info = epochs: 100 % - максимальное количество циклов
обучения;
show: 25 % - интервал вывода данных;
goal: 0 % - предельное значение критерия обучения;
time: Inf % - максимальное время обучения;
min_grad: 1.0e-006 % - максимальное значение градиента
критерия % качества;
max_fail: 5 % - максимально допустимый уровень
% превышения ошибки контрольного
% подмножества по сравнению с обучающим.
Процедура обучения прекратится, когда будет выполнено одно из следующих условий:
а) значение функции качества стало меньше предельного goal;
б) градиент критерия качества стал меньше значения min_grad;
в) достигнуто предельное значение циклов обучения epochs;
г) превышено максимальное время, отпущенное на обучение time;
д) ошибка контрольного подмножества превысила ошибку обучающего более чем в max_fail раз.
Функция traingd предполагает, что функции взвешивания dotprod, накопления netsum и активации transig или rogsig имеют производные. Для вычисления производных критерия качества обу-
чения perf по переменным веса и смещения используется метод обратного распространения. В соответствии с методом градиентного спуска вектор настраиваемых переменных получает следующее приращение:
dx = lr * dperf / dx ,
где tr - параметр скорости настройки, равный по умолчанию 0,01.
Функцией одновременного поиска минимума вдоль заданного направления в данной сети является функция srchbac.
5. Обучить рассматриваемую сеть: net8.trainParam.epochs = 500;
net8.trainParam.90al = 0.01;
[net8, TR] = train(net8, P, T);
TR % - характеристики процедуры обучения.
6. Произвести моделирование сети и оценить качество ее обучения:
Ynet8 = sim(net8, P) % - целевые значения.
Задание 9. Повторить 8-е задание для следующих функций обучения: traingda, traingdm, traingdx, trainrp, traincgf, traincgp, traincgb, trainscg, trainbfg, trainoss, trainlm. Сравнить полученные результаты.
Задание 10. Создать и обучить сеть для аппроксимации синусоидальной функции, зашумленной нормально распределенным шумом, выполнив следующие действия:
1. Задать обучающие последовательности:
P = [-1: .05: 1];
T = sin[2*pi*P] + 0.1*randn(size(P));
2. Сформировать сеть с прямой передачей сигнала:
net10 = newff([-1 1], [20 1], {?transig?, ?purelin?}, … ?trainbr?);
3. Настроить сеть:
net10.trainParam.epochs = 50;
net10.trainParam.show = 10; % для отображения.
4. Обучить сеть и построить график аппроксимируемой функции и график выхода сети: net10 = train(net, P, T);
Y = sim(net, P);
plot(P, Y, P, T, `+') % - два графика.
5. Изменяя количество нейронов в первом слое, исследовать качество аппроксимации.
Задание 11. Создать сеть и произвести ее последовательную адаптацию, выполнив следующие команды:
net11 = newff([-1 2; 0 5], [3, 1], … {?tansig?, ?purelin?}, ?traingd?);
net11.inputWeights{1, 1}.learnFcn = ?learngd?;
net11.layerWeights{2, 1}.learnFcn = ?learngd?;
net11.biases{1}.learnFcn = ?learngd?;
net11.biases{2}.learnFcn = ?learngd?;
net11.layerWeights{2, 1}.learnParam.lr = 0.2;
P = [-1 -1 2 2; 0 5 0 5];
T = [-1 -1 1 1];
P = num2cell(P,1);
T = num2cell(T,1);
net11.adaptParam.passes = 50;
[net11, a, e] = adapt(net11, P,T);
a = sim(net11, P) % [-1.02] [-0.99624] [1.0279] [1.0021];
mse(e) % - должно быть 5,5909е-004.
Задание 12. Создать сеть и произвести ее последовательную адаптацию, используя следующие функции настройки весов и смещений: learngdm, learnlv1, learnlv2, learnk, learncon, learnis, learnos, learnsom, learnh, learnhd. Сравнить алгоритм настройки для одной и той же обучающей последовательности.
Задание 13. Создать, обучить и апробировать многослойную нейронную сеть с прямой передачей сигнала для принятия решения о зачислении в высшее учебное заведение абитуриентов, сдавших вступительные экзамены по математике, физике и русскому языку.
Правила приема таковы:
1. Проходной балл для абитуриентов, не имеющих льгот, должен быть равен 11;
2. Удовлетворительные оценки по математике и физике для этой категории абитуриентов недопустимы;
3. Абитуриенты, имеющие льготы, зачисляются при любых положительных оценках по всем трем предметам.
Для обучения сети следует использовать все изученные методы адаптации и обучения и провести анализ их эффективности. Следует также определить минимальное количество слоев и нейронов, обеспечивающее удовлетворительное решение поставленной задачи. Для формирования обучающего, контрольного и тестового множества построить дискретную имитационную модель, используя инструментальный пакет Simulink.
Список литературы
1. Дьяконов, В. Matlab 6: учебный курс [Текст] / В. Дьяконов. - СПб.: Питер, 2001. - 592 с.
2. Медведев, В. Г. Нейронные Сети Matlab 6 / В. Г. Медведев; под общ. ред. к.т.н. В. Г. Потемкина. - М.: ДИАЛОГ-МИФИ, 2002. - 496 с. - (Пакеты прикладных программ; Кн.4).
3. Галушкин, А. И. Теория нейронных сетей [Текст] / А. И. Галушкин. - М.: ИПРЖР, 2000. - 416 с.
4. Галушкин, А. И. Нейрокомпьютеры [Текст]. - М.: ИПРЖР, 2000. - 532 с.
5. Нейрокомпьютеры и интеллектуальные работы [Текст] / под ред. В. Г. Неелова. - Киев: Пресса Украины, 1999. - 150 с.
6. Дунин-Барковский, В. П. Информационные процессы в нейронных структурах [Текст] / В. П. Дунин-Барковский. - М.: Наука, 1978.
7. Сивохин, А. В. Искусственные нейронные сети [Текст] /А. В. Сивохин; учеб. пособие / под ред. профессора Б. Г. Хмелевского. - Пенза: Изд-во Пенз. гос. ун-та, 2002. - 70 с.
8. Щербаков, М. А. Искусственные нейронные сети: Конспект лекций [Текст] / М. А. Щербаков. - Пенза: Изд-во Пенз. гос. тех. ун-та, 1996. - 44 с.
9. Осовский, С. Нейронные сети для обработки информации [Текст] / С. Осовский; пер. с польского И. Д. Рудинского. - М.: Финансы и статистика, 2002. - 344 с.
10. Дьяконов, В. П. Matlab 6/6.1/6.5 + Simulink 4/5. Основы применения. [Текст]. Полное руководство пользователя / В. П. Дьяконов. - М.: СОЛОН-Пресс, 2002. - 768 с.
Размещено на Allbest.ru
Подобные документы
Определение и виды модели, ее отличие от понятия моделирования. Формула искусственного нейрона. Структура передачи сигнала между нейронами. Способность искусственных нейронных сетей к обучению и переобучению. Особенности их применения в финансовой сфере.
реферат [136,2 K], добавлен 25.04.2016Первое систематическое изучение искусственных нейронных сетей. Описание элементарного перцептрона. Программная реализация модели распознавания графических образов на основе перцептрона. Интерфейс программы, основные окна. Составление алгоритма приложения.
реферат [100,5 K], добавлен 18.01.2014Понятие и свойства искусственных нейронных сетей, их функциональное сходство с человеческим мозгом, принцип их работы, области использования. Экспертная система и надежность нейронных сетей. Модель искусственного нейрона с активационной функцией.
реферат [158,2 K], добавлен 16.03.2011История возникновения, примеры использования и основные виды искусственных нейронных сетей. Анализ задач, решаемых при помощи Персептрона Розенблатта, создание схемы имитационной модели в среде Delphi. Исходные коды компьютерной программы Perseptron.
дипломная работа [933,1 K], добавлен 18.12.2011Гибкая технологии извлечения знаний из нейронных сетей, настраиваемой с учетом предпочтений пользователя. Тестирование, пробная эксплуатация и разработка новой версии программных средств, реализующих данную технологию. Индивидуальные пространства смыслов.
дипломная работа [336,3 K], добавлен 07.06.2008Диагностический анализ изучения алгоритмов обучения нейронных сетей "с учителем". Сбор входных и выходных переменных для наблюдений и понятие пре/пост процессирования. Подготовка и обобщение многослойного персептрона, модель обратного распространения.
курсовая работа [249,3 K], добавлен 22.06.2011Понятие искусственного нейрона и искусственных нейронных сетей. Сущность процесса обучения нейронной сети и аппроксимации функции. Смысл алгоритма обучения с учителем. Построение и обучение нейронной сети для аппроксимации функции в среде Matlab.
лабораторная работа [1,1 M], добавлен 05.10.2010Особенности нейронных сетей как параллельных вычислительных структур, ассоциируемых с работой человеческого мозга. История искусственных нейронных сетей как универсального инструмента для решения широкого класса задач. Программное обеспечение их работы.
презентация [582,1 K], добавлен 25.06.2013Рост активности в области теории и технической реализации искусственных нейронных сетей. Основные архитектуры нейронных сетей, их общие и функциональные свойства и наиболее распространенные алгоритмы обучения. Решение проблемы мертвых нейронов.
реферат [347,6 K], добавлен 17.12.2011Искусственные нейронные сети как одна из широко известных и используемых моделей машинного обучения. Знакомство с особенностями разработки системы распознавания изображений на основе аппарата искусственных нейронных сетей. Анализ типов машинного обучения.
дипломная работа [1,8 M], добавлен 08.02.2017