Файл: Лабораторная работа 9 По дисциплине Теория информации, данные, знания.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 25.10.2023

Просмотров: 98

Скачиваний: 6

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ФЕДЕРАЛЬНОЕ АГЕНСТВО СВЯЗИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ

УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ.ПРОФ М.А. БОНЧ-БРУЕВИЧА»

(СПбГУТ)



ИНСТИТУТ НЕПРЕРЫВНОГО ОБРАЗОВАНИЯ
Лабораторная работа № 9

По дисциплине: «Теория информации, данные, знания»

Исследование методов классификации изображений рукописных цифр с помощью полносвязной нейронной сети

Вариант 4

Фамилия: Бахвалов

Имя: Руслан

Отчество: Игоревич

Курс: 2

Студ. Билет №:1910024

Группа №: ИБ-94з

Дата сдачи работы:

Преподаватель: Литвинов В.Л.


г. Санкт-Петербург

2021 год

Цель работы: исследование принципов разработки нейронной сети на примере классификации изображений с помощью GPU.

Классификация — понятие в науке, обозначающее разновидность деления объёма понятия по определённому основанию (признаку, критерию), при котором объём родового понятия (класс, множество) делится на виды (подклассы, подмножества), а виды, в свою очередь делятся на подвиды и т.д.

Задание:

  1. Исследовать нейронную сеть при заданных начальных параметрах (таблица 1).

  2. Исследовать зависимость точности распознавания от количества нейронов в скрытом слое, количества слоев, метода активации.

  3. Замерьте время вычисления 100 эпох на CPU и на GPU. Какое ускорение вы наблюдаете?

  4. Постройте на одном графике loss для train и test. Имеется ли переобучение сети?


Таблица 1. Начальные значения гиперпараметров нейронной сети.

Вариант

Метод оптимизации

Число нейронов в скрытом слое n_hidden_neurons

Шаг градиентного спуска lr

4

ADAM

5

0.01




Выполнение работы:

Выполнение лабораторной работы будет производиться в среде Google Colaboratory:

https://colab.research.google.com/notebooks/welcome.ipynb.

Задание 1.

Зафиксируем последовательность случайных чисел с помощью команды random seed. Также фиксируем генераторы модуля numpy и seed. Включаем детерминистичный режим для библиотеки cudnn.

Выставив все эти параметры (рис. 1), мы можем гарантировать то, что у нас эксперименты будут воспроизводимы.



Рисунок 1. Код программы для воспроизводимости эксперимента.

Кроме того, нам понадобится датасет. Самый простой датасет для классификации изображений – это датасет MNIST, он содержит в себе рукописные цифры от 0 до 9, и его можно скачать с помощью библиотеки torchvision.datasets, мы скачаем и train, и test, и получим соответственно mnist_train, mnist_test.



Рисунок 2. Импорт датасета.

Преобразуем X_train и X_test в дробные числа.



Рисунок 3. Преобразование значения в дробные числа.

Преобразуем 3х-мерный тензор X_train и X_test в двумерный тензор для передачи в полносвязную нейронную сеть.



Рисунок 4. Преобразование в двумерный тензор.

Создадим нейронную сеть. Назовём эту сеть MNISTnet. Внутри будет 100 скрытых нейронов.



Рисунок 5. Создание нейронной сети.

Добавим функцию loss. И применим батчи.



Рисунок 6. Функция loss и батчи.

Далее переключим среду обучения на GPU. Затем переложим вычисления на GPU. Для этого напишем код (рис. 7).



Рисунок 7. Код для вычисления на GPU.

Ниже представлен скриншот выполнения кода.



Рисунок 8. Результат обучения нейросети.
Задание 2

Вводные данные по умолчанию: количество эпох 50, lr = 0.01, n_hidden_neurons = 100, слоёв 2, метод активации Sigmoid.



Исследуем зависимость точности распознавания от количества нейронов в скрытом слое:

  • n_hidden_neurons = 100



Рисунок 9. Точность при n_hidden_neurons = 100.

  • n_hidden_neurons = 50



Рисунок 10. Точность при n_hidden_neurons = 50.

  • n_hidden_neurons = 20



Рисунок 11. Точность при n_hidden_neurons = 20.

По скриншотам видно, что при уменьшении количества нейронов точность распознавания падает.
Исследуем зависимость точности распознавания от количества слоёв:

  • количество слоёв 2




Рисунок 12. Точность при количестве слоёв = 2.

  • количество слоёв 3




Рисунок 13. Точность при количестве слоёв = 3.

  • количество слоёв 4




Рисунок 14. Точность при количестве слоёв = 4.

По скриншотам видно, что при увеличении слоёв больше 3х происходит ухудшение точности.

Исследуем зависимость точности распознавания от метода активации:

  • Sigmoid



Рисунок 15. Метод активации Sigmoid.

  • Tahn



Рисунок 16. Метод активации Tahn.

Из скриншотов видно, что наибольшую точность даёт метод активации Sigmoid.

Задание 3

Время вычисления 100 эпох при вводных данных для 4-го варианта.



Рисунок 17. Вычисление 100 эпох на CPU.


Рисунок 18. Вычисление 100 эпох на GPU.

Вычисление на GPU происходит в 3 раза быстрее.
Задание 4

Построим графики loss для train и test. Для этого добавим библиотеку matplotlib и функции вывода графиков.




Рисунок 19. Функция для вывода графика.

В результате мы получим следующий график.



Рисунок 20. Графики loss для train и test.

Из графика видно, что отсутствует переобучение сети, т.к. качество обучения для train растёт хуже.

Переобучение сети – качество на train растёт гораздо лучше, чем на test, сеть начинает запоминать картинки, вместо обучения новым вещам.

Вывод

В данной лабораторной работе мы научились классифицировать изображения рукописных цифр с помощью нейронной сети. С помощью GPU обучение происходит в несколько раз быстрее, чем на CPU. Узнали, что такое переобучение сети. При изменении входных данных изменяется точность распознавания и время обучения.