
ЛР3
.docxГУАП
КАФЕДРА № 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
старший преподаватель |
|
|
|
В.В. Боженко |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №3 |
СВЁРТОЧНЫЕ НЕЙРОННЫЕ СЕТИ |
по курсу: МАШИННОЕ ОБУЧЕНИЕ |
|
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
|
|
|
|
|
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2024
Цель работы: обучить свёрточную нейронную сеть распознавать изображения.
Ход работы
Был установлен keras.utils и импортирваны необходимые библиотеки и методы (Рисунок 1).
Рисунок 1 – Импорт
Загружен набор данных для оценки моделей машинного обучения по проблеме классификации рукописных цифр MNIST (Рисунок 2). Каждое изображение представляет собой квадрат размером 28 на 28 пикселей (всего 784 пикселя). В этом наборе 60 000 изображений используются для обучения модели, и для ее тестирования используется отдельный набор из 10 000 изображений.
Рисунок 2 – Загрузка MNIST
x - изображение, y - соответствующая ему цифра от 0 до 9.
Выведены случайным образом по 4 изображения из тестового и тренировочного наборов и их значения (Рисунок 3, 4)
Рисунок 3 – Код для вывода
Рисунок 4 – Вывод изображений
Набор данных структурирован как трехмерный массив. Чтобы подготовить данные, изображения были представлены в виде одномерных массивов (так как считаем каждый пиксель отдельным входным признаком). В этом случае изображения размером 28 × 28 будут преобразованы в массивы, содержащие 784 элементов (Рисунок 5).
Рисунок 5 – Размеры массивов
Выходная переменная представляет собой целое число от 0 до 9, т.к. это задача классификации с несколькими классами. Значения класса были закодированы в вектор (Рисунок 6).
Рисунок 6 – Кодирование класса
Была создана полносвязная модель с двумя слоями, линейной функцией активации на входе и softmax на выходе (Рисунок 7).
Рисунок 7 – Создание модели
Модель была обучена (Рисунок 8).
Рисунок 8 – Обучение модели
Данные о модели были занесены в датафрейм (Рисунок 9).
Рисунок 9 – Данные о модели
Созданная модель с двумя слоями имеет высокий показатель точности.
Выполнено предсказание, для этого, с помощью argmax возвращены значения y_test из закодированных в изначальные (Рисунок 10).
Рисунок 10 – Предсказание
Выведен отчет о результатах классификации (Рисунок 11).
Рисунок 11 – Отчет о результатах классификации
precision: процент правильно идентифицированных объектов относительно всех объектов, которые были отнесены к данному классу моделью. Значения варьируются от 0.89 до 0.96.
recall: доля правильно идентифицированных объектов данного класса относительно всех объектов этого класса в данных. Значения находятся в пределах от 0.87 до 0.98. F1-score: среднегармоническое между точностью и полнотой. Значения меры F1 варьируются от 0.89 до 0.97. Support: сколько раз класс встречается в исходных данных.
accuracy: процент правильно классифицированных объектов. Значение точности составляет 0.93.
Макроусредненные (macro avg) и взвешенные средние (weighted avg) значения для точности, полноты и F1-меры, которые учитывают баланс между классами, составляют 0.93.
Все метрики показали высокие значения, модель работает хорошо.
Построена матрица ошибок (Рисунок 12).
Рисунок 12 – Матрица ошибок
Диагональные значения близки к 1, что говорит о практически идеальном предсказании класса.
Построены графики зависимости потерь и точности от эпох (Рисунок 13).
Рисунок 13 – Графики зависимости точности и потерь от эпох
По графикам видно равномерное обучение модели, переобучение не наблюдается.
Аналогично создана модель с 2 слоями и функцией активации relu на входном слое (Рисунок 14 - 17).
Рисунок 14 – Создание и обучение модели
Рисунок 15 – Данные о модели
Рисунок 16 – Матрица ошибок
Рисунок 17 – Графики
Матрица ошибок показала еще более высокие диагональные значения, на графиках наблюдается более плавное обучение без "скачков" в отличие от модели с линейной функцией активации на входном слое.
Аналогично созданы и обучены модели с большим количеством слоев и функцией активации relu (Рисунок 18 - 21).
Рисунок 18 – DNN модель с 3 слоями
Рисунок 19 – DNN модель с 4 слоями
Рисунок 20 – DNN модель с 5 слоями
Рисунок 21 – DNN модель с 6 слоями
Графики потерь на тренировочной и тестовой выборках каждой модели показали начинают расхождение, что может свидетельствовать о переобучении.
На рисунке 22 представлен датафрейм с данными о созданных моделях.
Рисунок 22 – Датафрейм
Все модели показали высокое значение точности и низкое значение потерь. С увеличением количества слоев, увеличивается значение точности. Наименьшее значение потерь показала модель 2, в следующих моделях потери возрастают, что может быть связано с переобучением, которое также наблюдается на графиках.
Был произведен импорт методов для работы с свёрточной нейронной сетью (Рисунок 23).
Рисунок 23 – Импорт
Выполнена загрузка и предобработка данных (Рисунок 24).
Рисунок 24 – Загрузка и предобработка данных
Создана модель с 1 сверточным блоком (Рисунок 25).
Рисунок 25 – Создание модели
Выведены данные о модели (Рисунок 26).
Рисунок 26 – Данные о модели
Выполнена компиляция и обучение модели (Рисунок 27).
Рисунок 27 – Компиляция и обучение модели
Информация о модели занесена в датафрейм (Рисунок 28).
Рисунок 28 – Занесение информации в датафрейм
Построены графики зависимости потерь и точности от эпох (Рисунок 29).
Рисунок 29 – Зависимость потерь и точности от эпох
Графики показывают постепенное обучение модели.
Аналогично создана модель с 3 сверточными слоями (Рисунок 30 - 33).
Рисунок 30 – Создание модели с 3 сверточными слоями
Рисунок 31 – Компиляция и обучение модели
Рисунок 32 – Данные о модели
Рисунок 33 – График зависимости потерь и точности от эпох
График имеет резкие скачки и провалы, также заметно расхождение графиков тестовой и тренировочной выборок, что говорит о переобучении.
На рисунке 34 представлен датафрейм с данными о всех созданных моделях.
Рисунок 34 – Полный датафрейм
Все DNN модели показали высокое значение точности и низкое значение потерь. С увеличением количества слоев, увеличивается значение точности. Наименьшее значение потерь показала модель 2, в следующих моделях потери возрастают, что может быть связано с переобучением, которое также наблюдается на графиках. CNN модели показали лучший результат чем DNN, увеличение числа свёрточных слоёв также ведёт к повышению точности модели.
Созданы два изображения рукописных цифр 5 и 8, изображения считаны из png файлов и преобразованы в numpy массивы (Рисунок 35).
Рисунок 35 – Импорт и преобразование изображений
Изображения выведены на экран (Рисунок 36).
Рисунок 36 – Вывод изображений
Выполнена предобработка данных (Рисунок 37).
Рисунок 37 – Предобработка
Выполнено предсказание с помощью лучшей по точности и потерям модели (Рисунок 38).
Рисунок 38 – Предсказание
Предсказанный и фактический класс совпали.
Произведена загрузка набора данных fashion_mnist с предметами одежды (Рисунок 39).
Рисунок 39 – Загрузка fashion_mnist
Рисунок 40 – Код для вывода изображений
Рисунок 41 – Изображения fashion_mnist
После изображений предметов одежды выведены классы, к которым они относятся:
0 Футболка/Топ
1 Брюки
2 Пуловер
3 Платье
4 Плащ
5 Сандаль
6 Рубашка
7 Кроссовок
8 Сумка
9 Ботильон
Произведена предобработка данных (Рисунок 42).
Рисунок 42 – Предобработка данных fashion_mnist
Создана модель с 3 сверточными слоями (Рисунок 43).
Рисунок 43 – Создание модели для fashion_mnist
Выведены данные о модели (Рисунок 44).
Рисунок 44 – Данные о модели
Модель скомпилирована и обучена (Рисунок 45).
Рисунок 45 – Компиляция и обучение model_fashion
Выведены метрики модели (Рисунок 46).
Рисунок 46 – Метрики модели
Модель имеет высокую точность и низкое значение потерь.
Выполнено предсказание и составлен отчет о классификации (Рисунок 47).
Рисунок 47 – Предсказание и отчет
Все метрики имеют высокие значения, модель работает хорошо.
Построена матрица ошибок (Рисунок 48).
Рисунок 48 – Матрица ошибок
Большинство диагональных значений близки к 1, значит модель хорошо предсказывает класс. Самое низкое значение у класса 6 (Рубашка), этот класс модель предсказывает хуже всего.
Построены графики зависимости точности и потерь от эпох (Рисунок 49).
Рисунок 49 – Графики зависимости потерь и точности от эпох
Наблюдается расхождение графиков потерь на тестовой и тренировочной выборках, что может говорить о переобучении.
Ссылка на Google Colab:
Вывод:
В ходе выполнения лабораторной работы были проведены эксперименты по обучению полносвязных и свёрточных нейронных сетей. Обучение происходило на наборе изображений рукописных чисел MNIST. Свёрточные нейронные сети показали лучшие результаты, чем полносвязные, но и те, и другие имеют достаточно высокий уровень точности для классификации. В ходе экспериментов с полносвязными сетями, было достигнуто переобучение, что стало заметно на графиках зависимости потерь от эпох. Также, увеличение числа сверточных слоев в сверточной нейронной сети, негативно отразилось на графике зависимотси точности и потерь от эпох, графики стали расходиться, что также может говорить о переобучении.
Были созданы изображения цифр 5 и 8, и распознаны с помощью одной из сверточных моделей, распознанный и фактический классы совпали.
Была создана модель для распознавания предметов одежды, обучение производилось на наборе данных fashion_mnist, использовалась сверточная нейронная сеть. Выполнено предсказание, выведен отчет о классификации, модель показала высокие значения по всем метрикам. Матрица ошибок показала, что хуже всего модель определяет класс 6 - Рубашка. Графики зависимости потерь и точности от эпох показали расхождение, что говорит о переобучении.