Regresja liniowa przy użyciu PyTorch

| | | | | | | | |

Najpierw musisz zainstalować PyTorch w swoim środowisku Python. Najprostszym sposobem na to jest — użyj narzędzia pip lub conda . Odwiedź pytorch.org i zainstaluj wersję swojego interpretera Pythona i menedżera pakietów, których chcesz używać.


# Możemy uruchomić ten kod Pythona na notatniku Jupyter
#, aby automatycznie zainstalować poprawną wersję
# PyTorch.


# http://pytorch.org / ze ścieżki importu systemu operacyjnego

z wheel.pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag

platforma = `{} {} - {}` . format (get_abbr_impl (), get_impl_ver (), get_abi_tag ())

akcelerator = `cu80` if path.exists ( `/ opt / bin / nvidia-smi` ) else `cpu`


! pip install - q http: / / download.pytorch.org / whl / {akcelerator} / latarka - 0,3 . 0.post4 - {platforma} - linux_x86_64.whl torchvision

Po zainstalowaniu PyTorch zajmijmy się teraz spójrz na kod.
Napisz dwa poniższe wiersze, aby zaimportować wymagane funkcje i obiekty biblioteki.


importuj latarka

z torch.autograd import Zmienna

Zdefiniujemy również niektóre dane i przypisujemy je do zmiennych x_data i y_data, w następujący sposób:


x_data = Zmienna (pochodnia.Tensor ([[ 1.0 ], [ 2.0 ], [ 3.0 ]]))

y_data = Zmienna (torch.Tensor ([[ 2,0 ], [ 4.0 ], [ 6.0 ]]))

Tutaj x_data & #8212; nasza zmienna niezależna i y_data — naszą zmienną zależną. To będzie na razie nasz zbiór danych. Następnie musimy zdefiniować nasz model. Definiowanie naszego modelu składa się z dwóch głównych etapów. Są to:

  1. Inicjowanie naszego modelu.
  2. Deklarowanie podania w przód.

Używamy poniższej klasy:

class LinearRegressionModel (torch.nn.Module):


def __ init __ ( self ):

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

self . linear = torch.nn.Linear ( 1 , 1 ) # Jedno wejście i jedno wyjście


def forward ( self , x):

y_pred = self . linear (x)

return y_pred

Jak widać, nasza klasa Model jest podklasą torch.nn.module. Ponadto, ponieważ mamy tutaj tylko jedno wejście i jedno wyjście, używamy modelu liniowego o rozmiarze wejścia i wyjścia równym 1.

Następnie tworzymy obiekt tego modelu.

# nasz model

nasz_model = LinearRegressionModel ()

Następnie wybierz optymalizator i kryteria strat. Tutaj użyjemy błędu średniokwadratowego (MSE) jako funkcji straty i stochastycznego spadku gradientu (SGD) jako naszego optymalizatora. Ustalamy również arbitralnie szybkość uczenia się na 0,01.


kryterium = torch.nn.MSELoss (size_average = False )

optymalizator = torch.optim.SGD (our_model.parameters (), lr = 0,01 )

Teraz dochodzimy do etapu nauki. Podczas szkolenia 500 razy wykonujemy następujące zadania:

  1. Wykonaj transfer na żywo, przekazując nasze dane i obliczając przewidywaną wartość y.
  2. Oblicz straty za pomocą MSE.
  3. Zresetuj wszystkie gradienty do 0, propaguj wstecz, a następnie zaktualizuj wagi.

for epoch w zakresie ( 500 ):


# Przejście do przodu: oblicz przewidywane y przez przekazanie

#x do modelu

pred_y = our_model (x_data)


# Oblicz i trać wydruk

strata = kryterium (pred_y, y_data)


# Zero gradientów, cofanie się

# i zaktualizuj wagę.

optimr.zero_grad()

loss.backward ()

Optimizer.step ()

print ( ` epoch {}, loss {} ` . format (epoch, loss.data [ 0 ]))

Po ukończeniu szkolenia sprawdzamy, czy otrzymujemy poprawne wyniki za pomocą zdefiniowany przez nas model. Sprawdzamy więc, czy nie ma nieznanej wartości x_data, w tym przypadku 4.0.


new_var = Zmienna (latarka.Tensor ([[[ 4.0 ] ]))

pred_y = our_model ( new_var)

print ( "przewiduj (po szkoleniu) " , 4 , nasz_model ( new_var) .data [ 0 ] [ 0 ])

Jeśli poprawnie wykonałeś wszystkie kroki, zobaczysz, że dla wpisu 4.0 otrzymasz wartość bardzo bliska 8,0, jak pokazano poniżej. W ten sposób nasz model zasadniczo uczy się relacji między wejściem a wyjściem bez wyraźnego programowania.

przewiduj (po szkoleniu) 4 7.966438293457031

Dla odniesienia można znaleźć cały kod tego artykułu poniżej:


import latarka

z torch.autograd importuj Zmienna

x_data = Zmienna (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 ) # Jedno wejście i jedno wyjście


def forward ( self , x):

y_pred = self . linear (x)

return y_pred


# nasz model

nasz_model = LinearRegressionModel ()

kryterium = torch.nn.MSELoss (size_average = False )

optymalizator = latarka.optim. SGD (our_model.parameters (), lr = 0,01 )


for epoch in range ( 500 ):

# Przejście do przodu: oblicz przewidywane y przez przekazanie

# —Ö do modelu

pred_y = nasz_model (x_data)


# Oblicz i trać print

loss = < klasa kodu ="plain "> kryterium (pred_y, y_data)


# Zero gradientów, wsteczne podanie,

# i zaktualizuj wagę.

optimer.zero_grad()

loss.backward ()

optimer.step ()

print ( `epoch {}, strata {}` . format (epoch, loss.data [ 0 ]))


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

pred_y = our_model (new_var)

print ( "przewidywanie (po szkoleniu)" , 4 , nasz_model (nowa_zmienna) .data [ 0 ] [ 0 ])

Linki

Mamy nadzieję, że ten artykuł pomógł Ci rozwiązać problem. Oprócz Regresja liniowa przy użyciu PyTorch sprawdź inne tematy związane z __del__.

Chcesz się wyróżniać w Pythonie? Zobacz naszą recenzję najlepszych kursów online Pythona 2022. Jeśli interesujesz się Data Science, sprawdź także, jak nauczyć się programowania w R.

Nawiasem mówiąc, ten materiał jest również dostępny w innych językach:



Anna Lehnman

Rome | 2022-11-29

Dzięki za wyjaśnienie! Utknąłem z Regresja liniowa przy użyciu PyTorch przez kilka godzin, w końcu się udało 🤗. Sprawdzane wczoraj, działa!

Javier Porretti

New York | 2022-11-29

Prosto i przejrzyście. Dziękuję za podzielenie się. Regresja liniowa przy użyciu PyTorch i inne sprawy z exp zawsze były moim słabym punktem 😁.. Wykorzystam to w mojej pracy licencjackiej

Dmitry Emmerson

Massachussetts | 2022-11-29

Może są jakieś inne odpowiedzi? Co Regresja liniowa przy użyciu PyTorch dokładnie oznacza?. Mam tylko nadzieję, że już się nie pojawi

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