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

NNTvZU_LR1_A03_Brigada_1_Kozlov_Muromtseva_Yarikova

.docx
Скачиваний:
5
Добавлен:
30.11.2022
Размер:
6.92 Mб
Скачать

Лабораторная работа No1. Изучение основ применения искусственных нейронных сетей

Бригада 1

Козлов Муромцева Ярикова //А-03-19.

Цель работы

Изучение основ работы с искусственными нейронными сетями (ИНС) в среде Neural Toolbox ППП Matlab.

П1_5 – начальная настройка НС по inputX1 и targetX1.

// lr1_punk4_backPropagation // lr1_p5_10_11_GD

// lr1_punkt4_backPropagation_data11

П6 = п1_5 по inputX3 и targetX3 – проверка работы обученной сети (+Supply Targets (Учитывать целевые данные) - целевые данные (targetX3)).

П7 - plot постройте график ошибки работы сети (network1_errors), график выходных значений сети (network1_outputs) и целевых значений выходов (target). // Сделайте вывод о качестве работы полученной сети.

П8 – half – копия обучающей выборки половины данных – П1-7 по half

П8.1 – half по inputX1 и targetX1 //п1-7 inputX1_half и targetX1_half П8.2 – half по inputX3 и targetX3 //п1-7 inputX3_half и targetX3_half

//Сделайте вывод о влиянии изменения размера выборки на качество работы ИНС

П9 – Увеличить вдвое кол-во нейронов на скрытом слое – было 10 стало 20.

П1_7 полные данные inputX1 и targetX1, inputX3 и targetX3.

//Сделайте вывод о влиянии добавления нейронов на качество работы ИНС.

П10 – Доп слой ИНС – 3 слоя всего. В доп. слое больше, меньше и равное количество нейронов, чем в предыдущем слое, П1_7 полные данные inputX1 и targetX1, inputX3 и targetX.

П10.1 – в доп слое больше нейронов – 20 на 2 слое

// Lr1_punkt10_3layers_20

П10.2 – в доп слое меньше нейронов – 5 на 2 слое

// Lr1_punkt10_3layers_5

П10.3 – в доп слое равное нейронов – 10 на 2 слое

// Lr1_punkt10_3layers_10

// Сделайте вывод о влиянии добавления дополнительного слоя на качество работы ИНС.

П11 – с другими параметрами обучения П10 – с алг. Левенберга-Марквардта

– 3 слоя: второй слой 1) 20, 2) 5, 3) 10. (+Training function = TRAINLM.):

  1. inputX1 и targetX1, inputX3 и targetX3.

//по П1-6, П7 – plot.

// Lr1_p11_10_11_ LM // Lr1_p11_10_13_LM

  1. inputX1_half и targetX1_half, inputX3_half и targetX3_half - half – копия половины выборки //п8 = п1-7 по half, plot

// Lr1_p11_10_11_LM_half

// Lr1_p11_10_13_LM_half

  1. Увеличить вдвое кол-во нейронов на скрытом слое – было 10 стало 20. - П1-7 полные данные inputX1 и targetX1, inputX3 и targetX3, plot //П9 = п1-7 на скрытом слое 10 на 20 нейронов. //Всего 2 слоя.

// Lr1_p11_20_11_LM

// Lr1_p11_20_13_LM

  1. Доп слой ИНС – 3 слоя. Больше, меньше и равное (отн. 10 на 1 слое.) - inputX1 и targetX1, inputX3 и targetX3.

П11.1 – в доп слое больше нейронов – 20 на 2 слое

// Lr1_p11_10_20_11_LM_layer3

// Lr1_p11_10_20_13_LM_layer3

П11.2 – в доп слое меньше нейронов – 5 на 2 слое

// Lr1_p11_10_5_11_LM_layer3

// Lr1_p11_10_5_13_LM_layer3

П11.3 – в доп слое равное нейронов – 10 на 2 слое

// Lr1_p11_10_10_11_LM_layer3

// Lr1_p11_10_10_13_ LM _layer3

Принцип обозначения файлов:

– [№ЛР]

– [пункт в лр 11]

– [10 нейронов на вн слое (20 – п9)]

– [ (‘_’ – если без доп слоя – 2 слоя)/ (если доп слой – 3 слоя – ‘10, 20, 5’ – нейронов на доп слое)]

– [(11 - inputX1 и targetX1)/ (13 - inputX3 и targetX3)]

– [LM - алг. Левенберга-Марквардта]

– [(‘_’ – без доп слоя – 2 слоя)/(‘layer3’ – доп слой, 3 слоя)]

– [(‘_’ – полная выборка)/(‘half’ – половина данных)

Lr1_p11_10_10_11_LM_layer3

Lr1_p11_10_10_13_ LM _layer3

Lr1_p11_10_11_ LM

Lr1_p11_10_11_LM_half

Lr1_p11_10_13_LM

Lr1_p11_10_13_LM_half

Lr1_p11_10_20_11_LM_layer3

Lr1_p11_10_20_13_LM_layer3

Lr1_p11_10_5_11_LM_layer3

Lr1_p11_10_5_13_LM_layer3

Для пунктов 13-15:

Код для получения номеров кластеров, это не нужно, но я вставлю пока что

clusters = zeros(1, length(punkt15_competitive_input11_outputs));

k=1;

for i = 0:(length(punkt15_competitive_input11_outputs)-1)

for j = 1:5

v = i*5+j;

if j==1 && punkt15_competitive_input11_outputs(v) == 1

clusters(k) = 1;

k = k+1;

elseif j==2 && punkt15_competitive_input11_outputs(v) == 1

clusters(k) = 2;

k = k+1;

elseif j==3 && punkt15_competitive_input11_outputs(v) == 1

clusters(k) = 3;

k = k+1;

elseif j==4 && punkt15_competitive_input11_outputs(v) == 1

clusters(k) = 4;

k = k+1;

elseif j==5 && punkt15_competitive_input11_outputs(v) == 1

clusters(k) = 5;

k = k+1;

end

end

end

П1_5

input11 и target11, GD, 2 слоя, 10 нейронов на 1 слое. Эпох = 1000, lr = 0.9. // lr1_p5_10_11_GD

Причина остановки – завершение эпох.

Можем распознать скопления точек в группы. Переобучение не наблюдаем. Обучение останавливается по окончании 1000 эпох. Градиент 0.000304.

П6

input13 и target13, GD, 2 слоя, 10 нейронов на 1 слое. Эпох = 1000, lr = 0.9. // lr1_p5_10_11_GD – в той же НС во вкладке Simulate окна Network.

Окно Train

Окно Simulate

Названия переменных, в которые будут записываться отклики (Outputs) и ошибки (Errors) ИНС в процессе обучения.

// lr1_p5_10_11_GD_outputs // lr1_p5_10_11_GD_errors

П7

Plot: - график ошибки работы сети (network1_errors), - график выходных значений сети (network1_outputs), - целевых значений выходов (target).

input11 и target11, input13 и target13, target13 – гр target.

>> plot(lr1_p5_10_11_GD_errors)

>> plot(lr1_p5_10_11_GD_outputs)

>> plot(target13)

П8

Создайте копию обучающей выборки, содержащую только половину данных из исходной выборки. Повторите пп.1 – 7.

>> input11_half = input11(:, 1:500);

>> input13_half = input13(:, 1:500);

>> target11_half = target11(:, 1:500);

>> target13_half = target13(:, 1:500);

1-5)

*Сбросили нач коэфф

6/)

lr1_p5_10_11_GD_half_outputs

lr1_p5_10_11_GD_half_errors

7)

>> plot(lr1_p5_10_11_GD_half_errors)

>> plot(lr1_p5_10_11_GD_half_outputs) >> plot(target13_half)

//Некрасиво - с ЛР

Errors data 11

Outputs 11

Target data 11

Пункт 6+, дата 1.3

Errors data 1.3

Outputs data 1.3

Target 13

Половина данных пункт 8

>> input13_half = input13(:, 1:500);

>> target13_half = target13(:, 1:500);

>> nntools

8. Создайте копию обучающей выборки, содержащую только половину данных из исходной выборки. Повторите пп.1 – 7. Сделайте вывод о влиянии изменения размера выборки на качество работы ИНС.

Target13-half

Error

Outputs

Target half 13

9. Увеличьте вдвое количество нейронов в скрытом слое. Повторите пп.1 – 7. Сделайте вывод о влиянии добавления нейронов на качество работы ИНС

Errors

Target

Data 13

Errors

Outputs

>> nntool

>> plot(lr1_punkt8_halfData_errors)

>> plot(lr1_punkt8_halfData_outputs)

>> plot(target13_half)

>> nntool

>> plot(lr1_punkt9_data11_errors)

>> plot(lr1_punkt9_data11_outputs)

>> plot(lr1_punkt9_data13_errors)

>> plot(lr1_punkt9_data13_outputs)

10. Добавьте дополнительный слой ИНС. Рассмотрите случаи, когда в дополнительном слое больше, меньше и равное количество нейронов, чем в предыдущем слое и повторите пп.1 – 7. Сделайте вывод о влиянии добавления дополнительного слоя на качество работы ИНС

  • Lr1_punkt10_3layers_5

Второй слой 5 нейронов

>> plot(Lr1_punkt10_3layers_5_outputs)Outputs

>> plot(Lr1_punkt10_3layers_5_errors)

Train 13

Train 13

>> plot(Lr1_punkt10_3layers_5_outputs) //13

>> plot(Lr1_punkt10_3layers_5_errors) //13

  • Lr1_punkt10_3layers_10

Train11

>> plot(Lr1_punkt10_3layers_10_outputs)

>> plot(Lr1_punkt10_3layers_10_errors)

10_train13

> plot(Lr1_punkt10_3layers_10_outputs) //13

>> plot(Lr1_punkt10_3layers_10_errors) //13

\

  • Lr1_punkt10_3layers_20

>> plot(Lr1_punkt10_3layers_20_outputs)

>> plot(Lr1_punkt10_3layers_20_errors)

Train 13 20 p10

>> plot(Lr1_punkt10_3layers_20_outputs) //13

>> plot(Lr1_punkt10_3layers_20_errors)//13

11. Повторите пп.1 - 10 с другими параметрами обучения – с помощью алгоритма Левенберга-Марквардта. Для этого при создании ИНС в соответствующем окне в качестве параметра Training function укажите TRAINLM

1. 10 layer 1, LM, X11

  • LR1_punkt11_LM_10_11

New

  • Lr1_p11_10_11_ML

>> plot(Lr1_p11_10_11_ML_outputs)

>> plot(Lr1_p11_10_11_ML_errors)

  • Lr1_p11_10_13_ML

  • Lr1_p11_10_13_ML

>> plot(Lr1_p11_10_13_ML_outputs)

>> plot(Lr1_p11_10_13_ML_errors)

  • Lr1_p11_10_11_ML_half

>> plot(Lr1_p11_10_11_ML_half_outputs)

>> plot(Lr1_p11_10_11_ML_half_errors)

  • Lr1_p11_10_13_ML_half

>> plot(Lr1_p11_10_13_ML_half_outputs)//13

>> plot(Lr1_p11_10_13_ML_half_errors) //13

ML 1l – 10 2 l – 5 11

Lr1_p11_10_5_13_ML

Bcnjhbz matlab

%-- 26.09.22 11:32 --%

nntool

input11_half = input11(:, 1:500)

length(target11))

length(target11)

target11_half = target11(:, 1:500)

length(target11_half)

input13_half = input13(:, 1:500);

target13_half = target13(:, 1:500);

nntools

nntool

plot(lr1_punkt8_halfData_errors)

plot(lr1_punkt8_halfData_outputs)

plot(target13_half)

nntool

plot(lr1_punkt9_data11_errors)

plot(lr1_punkt9_data11_outputs)

plot(lr1_punkt9_data13_errors)

plot(lr1_punkt9_data13_outputs)

nntool

plot(lr1_punkt10_data11_outputs)

plot(Lr1_punkt10_3layers_5_outputs)

plot(Lr1_punkt10_3layers_5_errors)

plot(Lr1_punkt10_3layers_5_outputs)

plot(Lr1_punkt10_3layers_5_errors)

plot(Lr1_punkt10_3layers_10_outputs)

plot(Lr1_punkt10_3layers_10_errors)

plot(Lr1_punkt10_3layers_10_outputs)

plot(Lr1_punkt10_3layers_10_errors)

plot(Lr1_punkt10_3layers_20_outputs)

plot(Lr1_punkt10_3layers_20_errors)

plot(Lr1_punkt10_3layers_20_outputs)

plot(Lr1_punkt10_3layers_20_errors)

nntool

plot(Lr1_punkt10_3layers_20_errors)

nntool

plot(Lr1_p11_10_11_ML_outputs)

plot(Lr1_p11_10_11_ML_errors)

nntool

plot(Lr1_p11_10_13_ML_outputs)

plot(Lr1_p11_10_13_ML_errors)

plot(Lr1_p11_10_11_ML_half_outputs)

plot(Lr1_p11_10_11_ML_half_errors)

plot(Lr1_p11_10_11_ML_half_outputs)

plot(Lr1_p11_10_13_ML_half_outputs)

plot(Lr1_p11_10_13_ML_half_errors)

12. По результатам моделирования сравните полученные результаты: длительность обучения, количество эпох обучения, полученные значения ошибок обучения и работы ИНС и занесите результаты с выводами в отчёт.

// тут есть выводы, честно-честно

13. Проведите кластеризацию данных inputX1 одним из классических методов (например, с помощью функции kmeans). Количество предполагаемых кластеров задайте равным 5.

>> c1 = kmeans(input11', 5)

>> c11 = find(c1 == 1);

>> c12 = find(c1 == 2);

>> c13 = find(c1 == 3);

>> c14 = find(c1 == 4);

>> c15 = find(c1 == 5);

Результаты полученные с помощью классического метода

>> disp(string(sum(c1==1)) + " " + string(sum(c1==2)) + " " + string(sum(c1==3)) + " " + string(sum(c1==4)) + " " + string(sum(c1==5)));

218 187 190 205 200

14. Постройте график, иллюстрирующий разделение данных на кластеры. Используйте функции plot3 и find.

>> scatter3(transpose(input11(1,:)), transpose(input11(2,:)), transpose(input11(3,:)), 50, c1)

15. Создайте ИНС вида Competitive. Проведите её обучение с целью выделения 5 кластеров. Проанализируйте полученные результаты. Сравните полученные результаты с результатами классического метода.