Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

Міністерство освіти і науки України

Львівський національний університет імені Івана Франка


Факультет електроніки та комп’ютерних технологій

Звіт
про виконання модуля №1
з курсу «Нейромережі та нечіткі нейромережі»

Львів 2024
Варіант №1
Створити чотирьох шарову нейромережу. Прихований шар має містити 8
нейронів. Навчання даної мережі відбувається по методі зворотного поширення
похибки визначення ваг, за умови значення вхідного масиву х= [1,0,0]; [0,1,1];
[0,0,1] та вихідного масиву у=[1],[0],[1]. Необхідно вивести наступні параметри:
l3_error-похибка відхилення між очікуваним значенням та отриманим, та
значення отриманих ваг "syn2", "syn1","syn0".
Хід роботи
Код програми:
import numpy as np
# Функція сигмоїди для активації
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# Похідна функції сигмоїди
def sigmoid_derivative(x):
return x * (1 - x)
X = np.array([[1,0,0],
[0,1,1],
[0,0,1]])
y = np.array([[1],
[0],
[1]])
# Ініціалізація ваг випадковими значеннями
np.random.seed(1)
# Ваги між вхідним та прихованим шарам
syn0 = 2 * np.random.random((3, 8)) - 1
# Ваги між першим та другим прихованими шарами
syn1 = 2 * np.random.random((8, 8)) - 1
# Ваги між другим та вихідним шарами
syn2 = 2 * np.random.random((8, 1)) - 1
# Навчання мережі
for i in range(30000):
# Прямий прохід
l0 = X
l1 = sigmoid(np.dot(l0, syn0))
l2 = sigmoid(np.dot(l1, syn1))
l3 = sigmoid(np.dot(l2, syn2))
# Обчислення похибки
l3_error = y - l3
if i % 2000 == 0: # виводимо значення похибки кожні 2000 ітерацій
print("Похибка після {} ітерацій: {}".format(i, np.mean(np.abs(l3_error))))
# Корекція ваг вздовж зворотного шляху згідно з градієнтом
l3_delta = l3_error * sigmoid_derivative(l3)
l2_error = l3_delta.dot(syn2.T)
l2_delta = l2_error * sigmoid_derivative(l2)
l1_error = l2_delta.dot(syn1.T)
l1_delta = l1_error * sigmoid_derivative(l1)
syn2 += l2.T.dot(l3_delta)
syn1 += l1.T.dot(l2_delta)
syn0 += l0.T.dot(l1_delta)
print("Навчання завершено.\n")
print("Ваги syn2: ")
print(syn2)
print("\nВаги syn1: ")
print(syn1)
print("\nВаги syn0: ")
print(syn0)
print("\nОтримані дані: ")
print(l3)
print("\nОчікувані дані: ")
print(y)
Результати:
Висновок: виконуючи модуль №1, я створила чотирьохшарову нейромережу,
прихований шар якої містить 8 нейронів та виконала навчання даної мережі.

You might also like