Нежное введение в Pytorch с линейной и логистической регрессией
В продолжение предыдущей статьи мы сейчас увидим более причудливые вещи и впервые познакомимся с Pytorch. Начиная с основ мл, мы не будем рассматривать регрессию, а сосредоточимся только на реализации.
Линейная регрессия
Начиная с игрушечного примера ожидаемой продолжительности жизни, чтобы познакомиться с самыми основами pytorch.
Numpy в тензор
Давайте загрузим данные и преобразуем их в torch.Tensor
Функция потерь и оптимизатор
Определите MSEкак функцию потерь и SGDалгоритм как оптимизатор.
Определение модели
В PyTorch модель определяется как подкласс класса torch.nn.Module. Очень пифонично, не правда ли. Компоненты модели, такие как слои и функции активации, обычно определяются в __init__method подкласса. Поскольку целевой задачей является линейная регрессия, для ее описания достаточно одного узла nn.Linearnode. В своей простейшей форме он принимает функции в качестве входных данных и размер числа в качестве выходных данных.
Методforward — это обязательная функция, которая определяет, как входные данные будут проходить через слои. В этом примере это сквозной узел.
Тренировочный цикл
Давайте соберем основные компоненты обучения (модель, функция потерь и оптимизатор), чтобы:
1) выполнить forward pass
2) рассчитать потери с учетом правды y
3) выполнить backpropagation
4) updateвеса и предубеждения
5) zeroградиентов для изящного вычисления следующей партии. Наконец, генерируется новое значение целевой функции.
Время выполнения обучения
Время выполнения обучения — это процесс, который итеративно адаптирует модель для описания обучающих данных с заданной целевой функцией. Модель сходится, когда объективная мера достигает приемлемого уровня производительности.
В этом примере лучшее, что может сделать линейная модель, — это нарисовать линию, которая минимизирует остаточные значения из набора данных. На следующем рисунке показано продвижение линейной модели каждые 100 эпох.

Логистическая регрессия
Следующий раздел посвящен классификации разновидности регрессии, где мы собираемся использовать числовой набор данных изображений. В этом разделе мы продемонстрируем только новые модули, необходимые для этого примера, так как большая часть конвейера ml осталась прежней.
Pytorch DataLoader
Следуя тому же объектно-ориентированному подходу, класс ImageDataLoader наследует класс torch.utils.data.Datasetclass, который поможет нам загружать и перебирать образцы набора данных. Мы используем конструктор __init__, чтобы нарезать загруженные данные на изображения и метки. Когда создается экземпляр ImageDataLoader, __getitem__работает как метод выборки для создания пары ‹image,label›. Этот объект объединен с DataLoader, итерируемым классом, который предоставляет конвейеру данных дополнительные функции, такие как batch_size, shuffle, num_workers и т. д.
Варианты подгонки модели:
- итерация набора данных в пакетах
- рассчитать потери и точность на эпоху, чтобы отслеживать обучение модели
Прямой проход и обратное распространение выполняются для каждого пакета, а не для каждой эпохи. Чтобы рассчитать потери и точность на эпоху, мы выполняем прямое распространение в режиме no_grad, чтобы отключить расчет градиента и накапливать потери и точность отдельно. Хитрость в этой операции заключается в преобразовании значений на основе Tensor в стандартные значения, что очень удобно при использовании .item().
Теперь мы можем обучить и оценить модель регрессии.
Evaluating... Test loss: 2.324 - Test Accuracy: 6.69% Training... Epoch 10 - Train loss: 0.854 - Train Accuracy: 83.52% Epoch 20 - Train loss: 0.645 - Train Accuracy: 85.62% Epoch 30 - Train loss: 0.561 - Train Accuracy: 86.72% Epoch 40 - Train loss: 0.513 - Train Accuracy: 87.39% Epoch 50 - Train loss: 0.481 - Train Accuracy: 87.89% Evaluating... Test loss: 0.458 - Test Accuracy: 88.72%
Краткое содержание
Подводя итог, можно сказать, что реализация Hello World в регрессионных моделях с помощью Pytorch была полезной и увлекательной. Pytorch предлагает большую гибкость благодаря своей природе python и позволяет быстро экспериментировать с ограниченным количеством ошибок во время выполнения. Он производит впечатление очень быстрого из-за его эффективности построения вычислительного графа и механизма автоматического дифференцирования во время выполнения. В качестве следующего примера мы собираемся больше изучить его эффективность, попробовав немного более сложный пример.
Я надеюсь, что вы найдете статью полезной и хорошей причиной, чтобы мотивировать вас начать изучать Pytorch. Исходный код проекта доступен в github.
Найдите меня в LinkedIn и Twitter. Моя домашняя страница.
Цитировать как
@article{niafas23pytorchregression,
title = "Linear Regression in Pytorch",
author = "Niafas, Stavros",
journal = "https://sniafas.eu/",
year = "2023",
howpublished = {https://medium.com/@sniafas/regression-with-pytorch},
}
Ставрос Ниафас — инженер по машинному обучению, интересующийся более широкой областью ИИ, специализирующейся на методах ИИ, ориентированных на данные, активном обучении, MLOps и компьютерном зрении.
Он стремится демократизировать исследования и разработки и заполнить пробел между исследованиями и производством. .