Tensor hazırlama
- Makine Öğrenmesi kursu
- İleri seviye
- Ders 25/78
- 7 dk
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ış çıkarBu, 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
import torch
x = torch.arange(10, dtype=torch.float32).unsqueeze(1)
y = 3 * x + 2
# buraya yazÖrnek çözüm
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.
x = torch.arange(10, dtype=torch.float32).____(1)
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 |