PyTorch kullanarak doğrusal regresyon

| | | | | | | | | | | | | | | | | | | |

Önce, Python ortamınıza PyTorch`u yüklemeniz gerekecek. Bunu yapmanın en kolay yolu — pip veya conda aracını kullanın. pytorch.org adresini ziyaret edin ve Python yorumlayıcınızın ve kullanmak istediğiniz paket yöneticinizin sürümünü yükleyin.


# Bu Python kodunu bir Jupyter not defterinde çalıştırabiliriz
# doğru sürümü otomatik olarak yüklemek için
# PyTorch.


# http://pytorch.org / işletim sisteminden içe aktarma yolundan

`dan < kod sınıfı = "plain"> wheel.pep425tags içe aktar get_abbr_impl, get_impl_ver, get_abi_tag

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

hızlandırıcı = `cu80` if path.exists ( `/ opt / bin / nvidia-smi` ) başka `cpu`


! pip kurulumu - q http: / / download.pytorch.org / whl / {hızlandırıcı} / meşale - 0.3 . 0.post4 - {platform} - linux_x86_64.whl torchvision

PyTorch kuruluyken şimdi başlayalım koda bakın.
Gerekli kitaplık işlevlerini ve nesnelerini içe aktarmak için aşağıdaki iki satırı yazın.


import meşale

torç.autograd içe aktar Değişken

Ayrıca bazı veriler tanımlıyoruz ve bunu x_data ve y_data değişkenlerine atıyoruz, em> aşağıdaki gibidir:


x_data = Değişken (torch.Tensor ([[ 1.0 ], [ 2.0 ], [ 3.0 ]]))

y_data = Değişken (torch.Tensor ([[ 2.0 ) ], [ 4.0 ], [ 6.0 ]]))

Burada x_data & #8212; bağımsız değişkenimiz ve y_data — bağımlı değişkenimiz. Şimdilik veri setimiz bu olacak. Ardından, modelimizi tanımlamamız gerekiyor. Modelimizi tanımlamanın iki ana adımı vardır. Bunlar:

  1. Modelimizi başlatıyorlar.
  2. İleri pas bildiriliyor.

Aşağıdaki sınıfı kullanıyoruz:

class LinearRegressionModel (torch.nn.Module):


def __ init __ ( self ):

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

self . lineer = torch.nn.Linear ( 1 < kod sınıfı = "düz">, 1 ) # Bir giriş ve bir çıkış


def ileri ( self , x):

y_pred = öz . lineer (x)

dönüş y_pred

Gördüğünüz gibi, Model sınıfımız torch.nn.module öğesinin bir alt sınıfıdır. Ayrıca burada sadece bir girdimiz ve bir çıktımız olduğu için girdi ve çıktı boyutu 1 olan doğrusal bir model kullanıyoruz.

Ardından bu modelin bir nesnesini oluşturuyoruz.

# bizim modelimiz

bizim_modelimiz = LinearRegressionModel ()

Bundan sonra bir optimize edici seçin ve kayıp kriterleri. Burada kayıp fonksiyonumuz olarak ortalama karesel hatayı (MSE) ve optimize edicimiz olarak Stokastik Gradyan İnişini (SGD) kullanacağız. Ayrıca öğrenme oranını isteğe bağlı olarak 0,01 olarak sabitliyoruz.


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

optimize edici = torch.optim.SGD (your_model.parameters (), lr = 0,01 )

Şimdi öğrenme aşamamıza geliyoruz. Eğitim sırasında aşağıdaki görevleri 500 kez gerçekleştiriyoruz:

  1. Verilerimizi aktararak ve tahmin edilen y değerini bularak canlı aktarım gerçekleştirin.
  2. MSE kullanarak kaybı hesaplayın.
  3. Tüm degradeleri 0`a sıfırlayın, geri yayın ve ardından ağırlıkları güncelleyin.

for epoch aralığında ( 500 ):


# İleri geçiş:

#x modele

pred_y = bizim_modelimiz (x_data)


# Hesapla ve yazdırmayı kaybet

kayıp = kriter (pred_y, y_data)


# Sıfır gradyan, geri izleme

# ve ağırlığı güncelleyin.

optimizer.zero_grad ()

kayıp.backward ()

optimizer.step ()

print ( ` çağ {}, kayıp {} ` . biçim (dönem, kayıp.veri [ 0 ]))

Eğitimi tamamladıktan sonra, aşağıdaki komutu kullanarak doğru sonuçları alıp almadığımızı kontrol ederiz. tanımladığımız modeldir. Bu nedenle, bilinmeyen bir x_data değeri olup olmadığını kontrol ediyoruz, bu durumda 4.0.


new_var = Değişken (torch.Tensor ([[[ 4.0 ] ]))

pred_y = Our_model ( new_var)

print ( "tahmin (eğitimden sonra) " , 4 , bizim_modelimiz ( new_var) .data [ 0 ] [ 0 ])

Tüm adımları doğru bir şekilde takip ettiyseniz, 4.0 girişi için bir değer aşağıda gösterildiği gibi 8.0`a çok yakındır. Bu nedenle, modelimiz temel olarak girdi ve çıktı arasındaki ilişkiyi açık programlama olmadan öğrenir.

predict (eğitimden sonra) 4 7.966438293457031

Başvuru için aşağıdakileri bulabilirsiniz: bu makalenin tüm kodu aşağıdadır:


import meşale

torç.autograd içe aktar Değişken

x_data = Değişken (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 . lineer = torch.nn.Linear ( 1 < kod sınıfı = "düz">, 1 ) # Bir giriş ve bir çıktı


def ileri ( self , x):

y_pred = öz . lineer (x)

dönüş y_pred


# bizim modelimiz

bizim_modelimiz = LinearRegressionModel ()

kriter = torch.nn.MSELoss (size_average = False < kod sınıfı = "düz"> )

optimize edici = meşale.optim. SGD (our_model.parameters (), lr = 0.01 )


için çağ aralık ( 500 ):

# İleri geçiş: tahmin edilen y`yi geçerek hesaplayın

# —Ö modeline

pred_y = bizim_modelimiz (x_data)


# Hesapla ve kaybet yazdır

kayıp = < kod sınıfı ="plain "> kriter (pred_y, y_data)


# Sıfır gradyan, geri geçiş,

# ve ağırlığı güncelleyin.

optimizer.zero_grad ()

Los.backward()

optimizer.step ()

yazdır ( `dönem {}, kayıp {}` . biçim (dönem, kayıp.veri [ 0 < kod sınıfı = "düz">]))


new_var = Değişken (torch.Tensor ([[ 4.0 ]]))

pred_y = bizim_modelimiz (yeni_var)

print ( "tahmin (eğitimden sonra)" , 4 , bizim_modelimiz (yeni_var) .data [ 0 ] [ 0 ])

Bağlantılar