Использование встроенных модулей PyTorch

В последнем блоге Глава 4.1 мы подробно обсудили некоторые часто используемые встроенные пакеты PyTorch и некоторые базовые концепции, которые мы будем использовать для построения модели линейной регрессии. В этом блоге мы будем строить нашу модель с использованием встроенных модулей PyTorch.

В этом блоге мы собираемся использовать такую ​​информацию, как возраст, пол, ИМТ и т. Д. Человека. детей и курения, чтобы точно спрогнозировать расходы на страхование. Такая модель полезна для страховых компаний при определении ежегодной страховой премии для человека. Набор данных для этой проблемы взят из: https://www.kaggle.com/mirichoi0218/insurance.

Мы создадим модель, выполнив следующие шаги:

  1. Загрузите и изучите набор данных,
  2. Подготовьте набор данных для обучения,
  3. Создайте модель линейной регрессии,
  4. Обучите модель под данные,
  5. Делайте прогнозы, используя обученную модель.

Начнем с импорта необходимых пакетов. Мы обсудили большинство используемых пакетов в предыдущем блоге.

Шаг 1. - Загрузите и изучите данные

В этом блоге мы будем использовать платформу Kaggle для построения нашей модели. Мы можем загрузить наш набор данных прямо из Kaggle.

Чтобы загрузить набор данных в память, мы воспользуемся функцией read_csv из библиотеки pandas. Данные будут загружены как фрейм данных Pandas.

Мы могли бы напечатать первые пять строк набора данных, используя функцию head в Pandas.

Мы собираемся сделать небольшую настройку набора данных, чтобы каждый читатель мог получить немного другой набор данных. Этот шаг не является обязательным.

Функция customize_dataset слегка настроит набор данных, используя ваше имя в качестве источника случайных чисел.

Теперь давайте вызовем функцию customize и передадим набор данных и your_name в качестве аргументов и проверим первые несколько строк нашего набора данных с помощью функции head.

Теперь давайте узнаем количество строк и столбцов в нашем наборе данных.

Теперь мы должны назначить входные, выходные и категориальные столбцы (входные столбцы, которые не являются числовыми).

Мы можем найти минимальное значение, максимальное значение и среднее значение выходного столбца начисления. Мы также можем изобразить распределение зарядов на графике. Для справки загляните в https://jovian.ml/aakashns/dataviz-cheatsheet.

Шаг 2. - Подготовьте набор данных для обучения

Нам нужно преобразовать данные из фрейма данных Pandas в тензоры PyTorch для обучения. Для этого первый шаг - преобразовать его в массивы numpy, второй шаг - преобразовать категориальные столбцы в числа.

Прочтите Документацию Pandas, чтобы понять, как мы конвертируем категориальные переменные в числа.

Следующим шагом является преобразование этих массивов numpy в тензоры PyTorch.

Мы используем входные и целевые тензоры для создания наборов данных PyTorch и загрузчиков данных для обучения и проверки. Мы начнем с создания TensorDataset, а затем создадим набор данных для обучения и проверки. Мы будем использовать функцию random_split для разделения набора данных, чтобы получить наборы данных для обучения и проверки. Наконец, выберите размер пакета для создания загрузчиков данных для обучения и проверки.

Прежде чем мы перейдем к следующему шагу, давайте взглянем на пакет данных.

Шаг 3. - Создайте модель линейной регрессии

Давайте создадим определение класса нашей модели страхования. Перед созданием класса мы должны определить размер входных и выходных столбцов.

Давайте обсудим, что делает каждая функция. Функция training_step получает пакет данных. Из пакета мы получаем входные данные, self (входы), self означает саму модель, она вызывает функцию пересылки и передает входные данные в качестве аргументов. Внутри модуля nn.module реализован вызываемый метод, который просто принимает входные данные и передает их функции пересылки.

Функция validation_step также следует той же методологии, что и функция training_step. Кроме того, мы также рассчитываем и возвращаем потерю проверки.

После прохождения всех пакетов мы возвращаем список результатов. Мы извлекаем потери каждой партии и находим среднее значение потери партии, чтобы получить потерю проверки для каждой эпохи. Это делает функция validation_epoch_end.

После каждой эпохи мы регистрируем номер эпохи и потерю проверки для этой эпохи. Мы отображаем номер эпохи и потерю проверки для каждой 20-й эпохи и последней эпохи. Это делает функция epoch_end.

Давайте создадим модель с помощью класса InsuranceModel () и проверим веса и смещения модели с помощью model.parameters.

Шаг 4. - Обучите модель

Для обучения нашей модели мы будем использовать метод подгонки.

Функция оценки принимает два аргумента: модель и val_loader. Он выполняет итерацию по пакетам в наборе данных проверки и для каждого пакета вызывает функцию validation_step. Для каждой партии он возвращает потерю валидации как объект. Все это объединяется в список, и мы получаем список объектов в качестве вывода.

После этого мы вызываем validation_epoch_end (output). Это возвращает объект, который содержит среднюю потерю набора данных проверки.

Функция подгонки создает оптимизатор, который по умолчанию использует torch.optim.SGD, который выполняет градиентный спуск для параметров модели (веса и смещения). Он также принимает в качестве входных данных количество эпох, скорость обучения, модель, train_loader и val_loader. Мы объявляем history [], чтобы сохранить потерю проверки для каждой эпохи.

Вызовите функцию оценки, чтобы вычислить потери на проверочном наборе перед обучением.

Теперь мы готовы обучать модель. Возможно, вам придется запускать цикл обучения много раз, для разного количества эпох и с разной скоростью обучения, чтобы получить хороший результат. Кроме того, если ваша потеря становится слишком большой (или становится слишком большой), вам, возможно, придется повторно инициализировать модель, запустив model = InsuranceModel (). Поэкспериментируйте с этим некоторое время и постарайтесь снизить потери, насколько это возможно.

Мы получили окончательную потерю валидации в размере 6369,4995. Повторно инициализируйте модель и попробуйте другой набор значений для размера пакета, количества эпох, скорости обучения и т. Д., Чтобы получить еще меньшие потери при проверке.

Шаг 5. - Делайте прогнозы, используя обученную модель

Давайте напишем функцию, чтобы делать некоторые прогнозы.

Мы используем метод unsqueeze (0), чтобы дать дополнительное измерение, чтобы оно представляло пакет изображения. Как мы видим, прогнозы довольно близки к целевому значению.

Спасибо за чтение и до встречи на следующем!

Оставьте комментарий, если вам нужна ссылка на блокнот этого блога.

Для дальнейшего чтения в блоге,