Линейная регрессия с использованием PyTorch

| | | | | | | | |

Во-первых, вам необходимо установить PyTorch в вашей среде Python. Самый простой способ сделать это — используйте инструмент pip или conda . Посетите pytorch.org и установите нужную версию интерпретатора Python и диспетчера пакетов.


# Мы можем запустить этот код Python в блокноте Jupyter
# для автоматической установки правильной версии
# PyTorch.


# http://pytorch.org / from путь импорта ОС

from wheel.pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag

платформа = `{} {} - {}` . format (get_abbr_impl(), get_impl_ver(), get_abi_tag())

ускоритель = `cu80` if path.exists ( `/ opt / bin / nvidia-smi` ) else `процессор`


! pip install - q http: / / download.pytorch.org / whl / {ускоритель} / факел - 0,3 . 0.post4 - {платформа} - linux_x86_64.whl torchvision

Установив PyTorch, давайте теперь посмотрите на код.
Напишите две строки ниже, чтобы импортировать необходимые библиотечные функции и объекты.


импорт факел

from torch.autograd import Переменная

Мы также определяем некоторые данные и присваиваем их переменным x_data и y_data, следующим образом:


x_data = Переменная (torch.Tensor ([[ 1.0 ], [ 2.0 ], [ 3.0 ]]))

y_data = Variable (torch.Tensor ([[ 2.0 ], [ 4.0 ], [ 6.0 ]]))

Здесь x_data & №8212; наша независимая переменная и y_data — наша зависимая переменная. Это будет наш набор данных на данный момент. Далее нам нужно определить нашу модель. Есть два основных шага, связанных с определением нашей модели. Вот они:

  1. Инициализация нашей модели.
  2. Объявление передачи вперед.

Мы используем следующий класс:

class LinearRegressionModel (torch.nn.Module):


def __ init __ ( self ):

super (LinearRegressionModel, self ) .__ init __ ()

self . linear = torch.nn.Linear( 1 , 1 ) # Один ввод и один выход


def forward ( self , x):

y_pred = self . linear (x)

return y_pred

Как видите, наш класс Model является подклассом torch.nn.module. Кроме того, поскольку здесь у нас есть только один вход и один выход, мы используем линейную модель с размером входа и выхода 1.

Далее мы создаем объект этой модели.

# наша модель

our_model = LinearRegressionModel ()

После этого выберите оптимизатор и критерии потерь. Здесь мы будем использовать среднеквадратичную ошибку (MSE) в качестве нашей функции потерь и стохастический градиентный спуск (SGD) в качестве нашего оптимизатора. Мы также произвольно устанавливаем скорость обучения на 0,01.


критерий = torch.nn.MSELoss (size_average = False )

оптимизатор = torch.optim.SGD(our_model.parameters(), lr = 0.01 )

Теперь мы подошли к этапу обучения. Во время обучения мы выполняем следующие задачи 500 раз:

  1. Выполняем передачу в реальном времени, передавая наши данные и вычисляя прогнозируемое значение y.
  2. Рассчитайте потери с помощью MSE.
  3. Сбросьте все градиенты до 0, выполните обратное распространение, а затем обновите веса.

для эпохи в диапазон ( 500 ):


# Прямой проход: вычисление предсказанного y путем передачи

#x к модели

pred_y = our_model (x_data)


# Вычислить и потерять печать

потеря = критерий (pred_y, y_data)


# Нулевые градиенты, возврат

# и обновить вес.

optimizer.zero_grad()

loss.backward()

optimizer.step()

печать ( ` эпоха {}, потеря {} ` . format (epoch, loss.data[ 0 ]))

После завершения обучения мы проверяем, получаем ли мы правильные результаты, используя модель, которую мы определили. Поэтому мы проверяем его на наличие неизвестного значения x_data, в данном случае 4.0.


new_var = Variable (torch.Tensor ([[[ 4.0 ] ]))

pred_y = our_model ( new_var)

print ( "прогнозировать (после обучения)" , 4 , our_model( new_var) .data [ 0 ] [ 0 ])

Если вы правильно выполнили все шаги, вы увидите, что для записи 4.0 вы получаете значение очень близко к 8,0, как показано ниже. Таким образом, наша модель изучает отношения между вводом и выводом без явного программирования.

предсказать (после обучения) 4 7,966438293457031

Для справки вы можете найти весь код для этой статьи ниже:


import torch

from torch.autograd import Переменная

x_data = Переменная (torch.Tensor ([[ 1.0 ], [ 2.0 ], [ 3.0 ]]))

y_data = <класс кода = "обычный"> V ariable(torch.Tensor([[ 2.0 ], [ 4.0 ], [ 6.0 ]]))



class LinearRegressionModel (torch.nn.Module):


def __ init __ ( self ):

super (LinearRegressionModel, self ) .__ init __ ()

self . linear = torch.nn.Linear ( 1 , 1 ) # Один ввод и один выход


def forward ( self , x):

y_pred = self . linear (x)

return y_pred


# наша модель

our_model = LinearRegressionModel ()

критерий = torch.nn.MSELoss (size_average = False )

оптимизатор = torch.optim. SGD (our_model.parameters(), lr = 0.01 )


for эпоха in диапазон ( 500 ):

# Прямой проход: вычисление предсказанного y путем передачи

# —… моделировать

pred_y = our_model (x_data)


# Расчет и потеря печати

loss = критерий (pred_y, y_data)


# Нулевые градиенты, обратный проход,

# и обновление веса.

optimizer.zero_grad ()

loss.backward ()

optimizer.step ()

print ( `эпоха {}, потеря {}` . формат (эпоха, loss.data [ 0 ]))


new_var = Переменная (torch.Tensor ([[ 4.0 ]]))

pred_y = our_model (new_var)

print ( "предсказать (после обучения)" , 4 , our_model (new_var) .data [ 0 ] [ 0 ])

Ссылки

Мы надеемся, что эта статья помогла вам решить проблему. Помимо Линейная регрессия с использованием PyTorch, проверьте другие темы, связанные с __del__.

Хотите преуспеть в Python? Посмотрите наш обзор лучших онлайн-курсов Python 2022. Если вас интересует наука о данных, узнайте также, как изучить программирование на R.

Кстати, этот материал доступен и на других языках:



Cornwall Danburry

Tallinn | 2022-11-29

Просто и ясно. Спасибо, что поделились. Линейная регрессия с использованием PyTorch и другие вопросы с median всегда были моим слабым местом 😁.. Я просто надеюсь, что эта проюлема больше не возникнет

Xu Nickolson

Singapore | 2022-11-29

Я готовился к собеседованию по программированию., спасибо за разъяснение - Линейная регрессия с использованием PyTorch в Python не самый простой.. Я просто не совсем уверен, что это лучший метод

Frank Robinson

San Francisco | 2022-11-29

Просто и ясно. Спасибо, что поделились. Линейная регрессия с использованием PyTorch и другие вопросы с __del__ всегда были моим слабым местом 😁.. Я просто не совсем уверен, что это лучший метод

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

Common xlabel/ylabel for matplotlib subplots

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

12 answers

NUMPYNUMPY

Flake8: Ignore specific warning for entire file

12 answers

NUMPYNUMPY

glob exclude pattern

12 answers

NUMPYNUMPY

How to avoid HTTP error 429 (Too Many Requests) python

12 answers

NUMPYNUMPY

Python CSV error: line contains NULL byte

12 answers

NUMPYNUMPY

csv.Error: iterator should return strings, not bytes

12 answers


Wiki

Python | How to copy data from one Excel sheet to another

Common xlabel/ylabel for matplotlib subplots

Check if one list is a subset of another in Python

sin

How to specify multiple return types using type-hints

exp

Printing words vertically in Python

exp

Python Extract words from a given string

Cyclic redundancy check in Python

Finding mean, median, mode in Python without libraries

cos

Python add suffix / add prefix to strings in a list

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

Python - Move item to the end of the list

Python - Print list vertically