CodeBlanks Logo Icon CodeBlanks

Tensor hazırlama

Eğitim verisini tensor'a dönüştürürsün.

Proje: sıfırdan doğrusal regresyon

Bu projede PyTorch'un yapı taşlarını kullanarak doğrusal regresyonu elle kuracağız: tensörleri hazırlayacak, modeli tanımlayacak, kaybı hesaplayacak ve parametreleri gradyan inişiyle öğreneceğiz. Veri y = 3x + 2 ilişkisinden gelir; modelin w ≈ 3, b ≈ 2 bulmasını bekleriz.

x = torch.arange(10, dtype=torch.float32).unsqueeze(1)   # (10, 1)
y = 3 * x + 2                                              # (10, 1)

Sonraki gruplarda aynı işi nn.Module, nn.MSELoss ve optim.SGD ile kısaltacağız; önce mekanizmayı görmek önemli.

Sütun biçimi

Modeller girdiyi (örnek, özellik) şeklinde bekler. Tek özellikli veride bu, (10,) vektörünün (10, 1) sütununa çevrilmesi demektir. Hedef de aynı şekilde tutulursa kayıp hesabında istenmeyen yayınlama olmaz:

print(x.shape, y.shape)   # torch.Size([10, 1]) torch.Size([10, 1])
# dikkat: (10, 1) - (10,) -> (10, 10) yayınlanır, kayıp yanlış çıkar

Bu, PyTorch'ta en sık yapılan sessiz hatalardan biridir: kod çalışır ama sonuç yanlıştır.

Uygulama Tensörleri hazırla

x ve y'nin şekillerini aynı satırda yazdır. Ardından (y - x.squeeze(1)).shape ile yanlış yayınlamanın ürettiği şekli, (y - x).shape ile doğru şekli alt alta yazdır.

Başlangıç kodu

model.py
import torch

x = torch.arange(10, dtype=torch.float32).unsqueeze(1)
y = 3 * x + 2

# buraya yaz

Örnek çözüm

model.py
import torch

x = torch.arange(10, dtype=torch.float32).unsqueeze(1)
y = 3 * x + 2

print(x.shape, y.shape)
print((y - x.squeeze(1)).shape)
print((y - x).shape)

Beklenen çıktı

torch.Size([10, 1]) torch.Size([10, 1])
torch.Size([10, 10])
torch.Size([10, 1])

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Neden <code>dtype=torch.float32</code> verilir?

  • GPU için
  • arange tam sayı üretir; gradyan için ondalık tür gerekir Doğru cevap
  • Daha hızlı olduğu için
  • Zorunlu değildir

Açıklama: Tam sayı tensörleriyle çarpılan parametrelerin türleri uyuşmaz ve türev alınamaz.

2 Vektörü sütuna çevir.

Soru
x = torch.arange(10, dtype=torch.float32).____(1)
Cevap
x = torch.arange(10, dtype=torch.float32).unsqueeze(1)

Açıklama: unsqueeze(1) (10,) şeklini (10, 1) yapar.

3 Şekilleri eşleştir.

Kavram Anlamı
(10,) Vektör
(10, 1) Sütun
(10, 1) - (10,) (10, 10) hata
(10, 1) - (10, 1) Doğru fark

İleri seviye bölümündeki tüm dersler