Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

6 семестр / пр3

.docx
Скачиваний:
4
Добавлен:
30.07.2024
Размер:
333.81 Кб
Скачать

Введение

В данной практической работе реализована нейронная сеть 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 часть кода

Выводы

Соседние файлы в папке 6 семестр