Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МО_Иванова_4117_ЛР_2.docx
Скачиваний:
1
Добавлен:
29.04.2025
Размер:
269.31 Кб
Скачать

ГУАП

КАФЕДРА № 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 %.

Чтобы не изменять пиксели которые уже были изменены, добавлена проверка на совпадения значений в текущем зашумленном образе и исходном эталонном.

Соседние файлы в предмете Машинное обучение