Файл: Отчет по лабораторной работе 5 по дисциплине Основы искусственного интеллекта.docx
Добавлен: 22.11.2023
Просмотров: 42
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Министерство науки и высшего образования Российской Федерации
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Факультет математики и информационных технологий
Кафедра программного обеспечения вычислительной техники и
автоматизированных систем
ОТЧЕТ
по лабораторной работе №5
по дисциплине «Основы искусственного интеллекта»
Алгоритм обучения персептрона
Руководитель А.М. Семенов «»2023 г. Студент группы 20ПИнж(б)РПИС В.В. Машков «»2023 г. |
Оренбург 2022
1 Цель работы
Цель работы:
Изучить алгоритм обучения персептрона.
Задачи работы:
Написать программу моделирующую алгоритм обучения персептрона.
2 Ход работы
Данные для обучения персептрона представлены в таблице 1
Таблица 1 – Набор данных для обучения
Х1 | Х2 | Х3 | выход |
2,2 | 3,1 | 1,0 | 1 |
6,5 | 3,2 | 1,0 | -1 |
8,4 | 4,9 | 1,0 | -1 |
9,7 | 6,3 | 1,0 | -1 |
1,5 | 6,8 | 1,0 | 1 |
3,1 | 4,4 | 1,0 | 1 |
5,4 | 2,2 | 1,0 | -1 |
6,3 | 4,4 | 1,0 | 1 |
1,5 | 6,1 | 1,0 | -1 |
8,1 | 2,1 | 1,0 | -1 |
4,5 | 3,7 | 1,0 | 1 |
2,1 | 3,1 | 1,0 | 1 |
6,5 | 3,4 | 1,0 | -1 |
4,5 | 8,3 | 1,0 | 1 |
2,3 | 2,1 | 1,0 | 1 |
4,4 | 2,3 | 1,0 | -1 |
3,0 | 0,3 | 1,0 | -1 |
8,1 | 3,2 | 1,0 | 1 |
4,8 | 4,2 | 1,0 | 1 |
4,6 | 2,6 | 1,0 | -1 |
В качестве функции активации использовалась линейная функция. График функции представлен на рисунке 1.
В процессе обучения нейросети на основе набора данных (таблица 1) и были получены следующие данные (рисунок 2):
Рисунок 2 – результат обучения
На рисунке 3 графически представлена программа классификации. Если выходное значение равно -1, значит точка лежит выше линии, при 1 лежит ниже.
Рисунок 3 – Классификация точке
3 Вывод
В процессе выполнения лабораторной работы был изучен и реализован на языке python с помощью библиотеки numpy алгоритм обучения персептрона.
В результате было получено графическое разбиение входных точек на два класса. На основе полученных данных, заключаем что персептрон правильно классифицирует входные данные.
Приложение А
Код программы
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
cmap_light = ListedColormap(['#FF0000','#00FF00','#0000FF'])
X=np.array([[2.0,3.0,1.0],
[6.3,3.2,1.0],
[8.4,4.9,1.0],
[9.7,6.3,1.0],
[1.5,4.8,1.0],
[3.2,4.4,1.0],
[5.4,2.2,1.0],
[6.3,5.5,1.0],
[8.5,6.1,1.0],
[9.2,2.9,1.0],
[4.5,8.7,1.0],
[3.7,6.2,1.0],
[6.5,3.7,1.0],
[4.9,8.4,1.0],
[2.3,6.2,1.0],
[4.4,2.1,1.0],
[6.2,0.7,1.0],
[8.1,3.2,1.0],
[3.9,4.2,1.0],
[4.7,6.6,1.0]])
Y=np.array([[1,-1,-1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,1,-1,-1,-1,1,1]]).T
syn0=2*np.random.random((3,4))-1
syn1=2*np.random.random((4,1))-1
for j in range(60000):
l1 = 1/(1+np.exp(-(np.dot(X,syn0))))
l2 = 1/(1+np.exp(-(np.dot(l1,syn1))))
l2_d = (Y-l2)*(l2*(1-l2))
l1_d = l2_d.dot(syn1.T)*(l1*(1-l1))
syn1 += l1.T.dot(l2_d)
syn0 += X.T.dot(l1_d)
print("Выходные данные")
print(l2)
plt.scatter(X[:,0],X[:,1],c=Y)
plt.plot([0,10],[0,10],c='b')
plt.xlim((0,10))
plt.ylim((0,10))
plt.grid(True)
plt.show()