Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_na_voprosy_KAKIE_NADO.docx
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
452.36 Кб
Скачать
  1. Эффективность аппроксимации с помощью нейронных сетей и систем нечеткого вывода.

См. вопрос 10

  1. Моделирование линейного нейрона

function[outs] = Hell(a, b, c)

if (a*0.5 + b*0.5) > c then

outs = 1

else outs = 0;

end

endfunction

Hell (1, 1, 0.7)

Hell (0, 1, 0.7)

Hell (0, 0, 0.7)

Hell (1, 0, 0.7)

Функция Hell построит линейный нейрон, реализующий функцию логического И.

a и b – входные значения, которые формируют X = (a, b) – вектор входов.

outs – вектор выходов

W = (0.5, 0.5) – вектор весов

с– порог срабатывания

Функция активации – F = a*0.5 + b*0.5

Формула срабатывания нейрона:

  1. Моделирование многослойного перцептрона

Перцептрон – многослойную нейронную сеть прямого распространения сигнала, способную к обучению.

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

В данной функции lab описано не только моделирование многослойного перцептрона, но и его обучение по дельта-правилу.

O = (o1, o2, o3) – вектор выходов (2-го слоя)

X = (x1, x2, x3, x4) – вектор входов для нейронов 1-го слоя

W – вектор весов.

Y = (y1, y2) – вектор выходов нейронов 1-го слоя – они же входы для нейронов 2-го слоя.

Z = (z1, z2, z3) – желаемые значения

function[o1, o2, o3] = lab(x1, x2, x3, x4, z1, z2, z3)

//случайным образом инициализируем матрицу весов (2 шаг, 1 шаг упущен – в данном случае лишь 1 многослойный перцептрон)

w = rand(1, 10);

//допустимый уровень ошибки ξ

e0 = 0.0000001;

//ошибка

e = [1, 1, 1];

//скорость обучения – некоторый уровень обучения, шаг изменения ζ

s = 0.1;

//расчёт выходов нейронов (моделирование многослойного перцептрона) 3 шаг

//расчёт выходов нейронов 1-го слоя

if (0.5 * x1*w(1) + x2*w(2)) < 1 then

y1 = 1

else y1 = 0.5 * x1 * w(1) + x2 * w(2);

end

if (0.6 * x3 * w(3) + x4 * w(4)) < 1 then

y2 = 1

else y2 = 0.6 * x3 * w(3) + x4 * w(4);

end

//расчёт выходов нейронов 2-го слоя

if (1.7 * y1 * w(5) + 1.9* y2 * w(6)) < 1 then o1 = 1

else o1 = 1.7 * y1 * w(5) + 1.9* y2 * w(6);

end

if (1.9 * y1 * w(7) + 1.9* y2 * w(8)) < 1 then o2 = 1

else o2 = 1.9 * y1 * w(7) + 1.9* y2 * w(8);

end

if (1.9 * y1 * w(9) + 2.9* y2 * w(10)) < 1 then o3 = 1

else o3 = 1.9 * y1 * w(9) + 2.9* y2 * w(10);

end

//условие выхода (шаг 7 – выполняем проверку)

while ((e(1) > e0) | (e(2) > e0) | (e(3) > e0))

//пересчёт вектора весов (5 шаг, 4 шаг упускаем, просто не запоминаем результаты)

w(5) = w(5) + s*abs(z1 - o1)*y1;

w(6) = w(6) + s*abs(z1 - o1)*y2;

w(7) = w(7) + s*abs(z2 - o2)*y1;

w(8) = w(8) + s*abs(z2 - o2)*y2;

w(9) = w(9) + s*abs(z3 - o3)*y1;

w(10) = w(10) + s*abs(z3 - o3)*y2;

//расчёт выходов нейронов 2-го слоя

if (1.7 * y1 * w(5) + 1.9* y2 * w(6)) < 1 then o1 = 1

else o1 = 1.7 * y1 * w(5) + 1.9* y2 * w(6);

end

if (1.9 * y1 * w(7) + 1.9* y2 * w(8)) < 1 then o2 = 1

else o2 = 1.9 * y1 * w(7) + 1.9* y2 * w(8);

end

if (1.9 * y1 * w(9) + 2.9* y2 * w(10)) < 1 then o3 = 1

else o3 = 1.9 * y1 * w(9) + 2.9* y2 * w(10);

end

//вычисляем накопленную ошибку (6 шаг)

e(1) = 0.5*(z1 - o1)*(z1-o1);

e(2) = 0.5*(z2 - o2)*(z2 - o2);

e(3) = 0.5*(z3 - o3) * (z3 - o3);

end

endfunction

[o1, o2, o3] = lab(0.4, 0.1, 0.7, 0.8, 7, 55, 15)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]