- В рамках данной работы было необходимо реализовать
CNN
с использованиемNumpy
и протестировать решение на датасетеMNIST
. Кроме того, необходимо реализоватьResNet50
и протестировать модель на датасетеCar Dataset
с использованиемAdam
иAdamax
. - Модуль nn содержит классы и функции для нейронной сети написанной на numpy. Были реализованы
Linear, Conv2d, MaxPool2d, AvgPool2d, Flatten, Softmax
слои, которые в качестве данных хранят необходимые параметры слоя (например матрица весов W и биасы b в Linear слое). Базово все слои реализуют два метода -forward
иbackward
. Методforward
принимает на входnp.array
и применяет к нему некую трансформацию. Метод жеbackward
принимает на вход производную по выход данного слоя и обновляет все необходимые веса + считает производную по входу для продолжения обратного распространения ошибки. - В deep_learning_hw_np_model.ipynb содержится построение модели и код обучения кастомной нейронной сети на датасете
MNIST
. Разработанная архитектура хорошо справилась с классификацией цифр. Результаты классификации, confusion matrix и график падения ошибки можно увидеть в самом ноутбуке. - В deep-learning-hw1-pytorch.ipynb содержится построение и обучение
ResNet50
с различными оптимизаторами (Adam, Adamax
). СемействоResNet
в свое время показало отличные результаты на датасетеImageNet
, благодаря использованию residual блоков со skip-connection (метод, позволяющий справится с проблемой затухающих градиентов за счет пробрасывания входной информации дальше по сети с помощью суммы или конкатенации). К сожалению, модель очень сильно переобучалась и увеличениеweight_decay
не сильно спасло ситуацию. Возможно, большее число итераций и большийweight_decay
мог бы улучшить ситуацию. + хотелось бы добавить дополнительную регуляризацию с использованиемDropout
слоев, но в оригинальномResnet50
их не было. Кроме того, видно, чтоAdamax
улучшает сходимость в отличии отAdam
, однако метрики при этом ниже - возможно Adamax при других экспериментах потребовал бы еще больше регуляризации модели. - Источники: