
- •Санкт-Петербург 2024
- •Листинг 2 – Создание эталонных образов
- •Листинг 3 – Визуализация эталонных образов
- •Листинг 4 – Создание зашумленных образов
- •Листинг 5 – Визуализация зашумленных образов.
- •Листинг 6 – Создание сети Хопфилда
- •Листинг 7 – Выполнение предсказаний
- •Листинг 8 – Визуализация неверно восстановленных изображений
- •Листинг 9 – Вычисление ошибки восстановления
- •Листинг 11 – Выполнение предсказания для зашумленного образа
ГУАП
КАФЕДРА № 41
ОТЧЕТ
ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
Старший преподаватель |
|
|
|
В.В.Боженко |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №2 |
РАСПОЗНАВАНИЕ ОБРАЗОВ |
по курсу: МАШИННОЕ ОБУЧЕНИЕ |
|
|
РАБОТУ ВЫПОЛНИЛА
СТУДЕНТКА ГР. |
4117 |
|
|
|
А.В.Иванова |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2024
Цель работы:
Обучить нейронную сеть Хопфилда распознавать образ.
Ссылка на colab:
https://colab.research.google.com/drive/1vEtxy5YLEDVogUHp27u54VeLT7dXThGq#scrollTo=ZPw0M0O9mLN0
Задание:
Вариант 10. Образ - Любые три геометрические фигуры.
Ход работы:
В начале импортируются необходимые для работы библиотеки (Листинг 1): numpy для работы с матрицами; matplotlib для визуализации фигур и графиков; random для создания случайного шума.
Листинг 1 – Импорт необходимых библиотек
import numpy as np
import matplotlib.pyplot as plt
import random
Вначале сгенерированы 3 матрицы с “эталонными” образами геометрических фигур: квадрат, круг, ромб. Матрицы состоят из значений 1 - закрашенная клетка и -1 - пустая клетка. Размер всех матриц составляет 14х14. (Листинг 2)
В начале каждая матрица состоит из -1. Далее в зависимости от фигуры некоторые ячейки заменяются на 1.
Для квадрата на 1 заменяются все ячейки, находящиеся в диапазоне от 1 до 12 включительно по строке и столбцу. В результате получается заполненный квадрат без крайних рядом матрицы.
Для генерации талонного круга используется цикл while. Пока не будут рассмотрены все строки матрицы, в зависимости от номера строки выстраиваются значения для их пересечения с определёнными столбцами, которые формируют контур круга. Круг было принято сделать пустым, чтобы сеть реже путала его с квадратом, контур которого относительно близок.
Для эталонного треугольника заполняется половина матрицы по диагонали от левого верхнего угла до правого нижнего. В результате получается заполненный прямоугольный треугольник.
Листинг 2 – Создание эталонных образов
SIZE = 14
# матрица 1 - Квадрат
rectangle = np.ones((SIZE,SIZE),int) * (-1)
for i in range(1,13):
for j in range(1,13):
rectangle[i,j] = 1
# Матрица 2 - Круг
circle = np.ones((SIZE,SIZE),int) * (-1)
k = 1
i = 0
while (i < SIZE):
if (i == 0 or i == 13):
circle [i,5] = 1
circle [i,6] = 1
circle [i,7] = 1
circle [i,8] = 1
if (i == 1 or i == 12):
circle [i,3] = 1
circle [i,4] = 1
circle [i,9] = 1
circle [i,10] = 1
if ((i>=3 and i <=4) or (i>=9 and i <=10)):
circle [i,1] = 1
circle [i,12] = 1
if ((i>=5 and i <=8)):
circle [i,0] = 1
circle [i,13] = 1
i += 1
circle [2,2] = 1
circle [2,11] = 1
circle [11,2] = 1
circle [11,11] = 1
# Матрицв 3 - Треугольник
triangle = np.ones((SIZE, SIZE), int) * (-1)
for i in range(SIZE):
for j in range(i+1):
triangle[i][j] = 1
Эталонные образы визуализированы при помощи метода matplotlib.pyplot.matshow() (Листинг 3), принимающего на вход отображаемый массив. Результат приведен на Рисунке 1.
Листинг 3 – Визуализация эталонных образов
# Визуализация фигур
plt.matshow(rectangle)
plt.matshow(circle)
plt.matshow(triangle)
plt.show()
Рисунок 1 – Отображение эталонных образов
На основе эталонных изображений создан набор с зашумленными данными - в случайных местах матриц значение разного количества клеток заменено на противоположное (Листинг 4).
Функция добавляющая шум (make_noise) выбирает указанное количество случайных пикселей и меняет их. Создано 3 массива для хранения зашумленных отображений и уровня шума для каждого из эталонных образов. Уровень шума изменяется от 10 до 100 с шагом в 10, что в процентах составляет изменение с 5,1 % до 51 %.
Чтобы не изменять пиксели которые уже были изменены, добавлена проверка на совпадения значений в текущем зашумленном образе и исходном эталонном.