
6 семестр / пр3
.docx
Введение
В данной практической работе реализована нейронная сеть LeNet. Проведено обучение с Relu, MaxPool, и double Conv 3x3.
Сделан график значений Loss функций в требуемых вариациях.
Основная часть
Импорт библиотек.
Установка seed позволяет получать повторяемые результаты при генерации случайных чисел.
Скачиваем датасет CIFAR10.
Преобразование данных в формат тензоров позволяет использовать их в модели машинного обучения с помощью фреймворка PyTorch. Формат тензоров также позволяет выполнять операции линейной алгебры на данных и использовать графические процессоры для ускорения вычислений.
Узнаем диапазон значений в массиве x_train для анализа.
Нормализация позволяет повысить производительность модели, данные будут оказывать меньшее влияние на веса модели, снизится вероятность затухания градиента и переполнения.
Рисунок 1 — Скачивание данных
Выведены классы в выборке.
Смотрим на картинку с индексом 35 из выборки x_train.
Рисунок 2 — Изучение датасета
Размерность тензора: 50000 изображений размером 32х32 пикселя, каждый из которых имеет 3 канала (R, G, B).
Сделали каналы на второе место, вместо 4, проверили.
Также настроили так, чтобы по возможности считала видеокарта.
Рисунок 3 — Нормализация
fit_model() определяет функцию, которая обучает модель классификации изображений.
Функция принимает на вход:
размер батча batch_size,
число эпох обучения epochs,
тестовые и тренировочные данные X_test и X_train,
соответствующие им метки y_test и y_train,
модель model
оптимизатор optimizer.
Внутри функции происходит обучение модели, вычисление функции потерь, расчет градиентов и шаг оптимизации.
Функция возвращает список значений функции потерь на тренировочных и тестовых данных.
Проходимся по эпохам, смешиваем данные, расфасовываем по батчам, прогоням. После обучения считаем потерю на тестовых данных.
Рисунок 4 — Обучающая функция
Реализована модель LeNet5.
Слоя нейронной сети: два сверточных слоя (self.conv1 и self.conv2) и один полносвязный слой.
Первый сверточный слой принимает входные изображения размером 3 на 32 на 32 пикселя с паддингом в 2 пикселя. После свертки применяется функция активации Tanh, а затем слой пулинга с размером ядра 2 на 2 пикселя и шагом 2 пикселя.
Второй сверточный слой принимает выход первого слоя и использует 16 ядер свертки размером 5 на 5 пикселей без паддинга. Затем также применяется функция активации Tanh и слой пулинга с размером ядра 2 на 2 пикселя и шагом 2 пикселя.
Полносвязный слой принимает выход второго сверточного слоя и содержит 2 линейных слоя размером 576 и 32 нейрона соответственно, с применением функции активации Tanh между ними. Затем применяется линейный слой с 10 выходами, соответствующими 10 классам изображений.
Модель применяет softmax функцию для получения вероятностных предсказаний по каждому классу.
Рисунок 5 — 5 часть кода
Теперь вместо тангенса использована ReLU.
Рисунок 6 — 6 часть кода
Теперь вместо AvgPool2d используем MaxPool2d
Рисунок 7 — 7 часть кода
Теперь вместо kernel_size = 5, kernel_size = 3 и прописать 2 раза.
Рисунок 8 — 8 часть кода
Строим графики.
Рисунок 9 — график лоссов
Считаем f1 метрику — меру точности и полноты.
Рисунок 10 — 10 часть кода
Выводы