CodeBlanks Logo Icon CodeBlanks

Indexing

Tensor elemanlarına indeks ile erişilir.

İndeksleme

İndeksleme ve dilimleme NumPy'daki gibidir; ek olarak toplu veri işlerinde sık kullanılan birkaç fonksiyon vardır:

x = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(x[1].tolist())          # [4, 5, 6]
print(x[:, -1].tolist())      # [3, 6, 9]
print(x[x > 4].tolist())      # [5, 6, 7, 8, 9]  boolean maske
print(x[[0, 2]].tolist())     # [[1, 2, 3], [7, 8, 9]]

Sınıflandırmada tahmin edilen sınıf cikti.argmax(dim=1), en yüksek k olasılık torch.topk ile alınır.

gather ve doğru sınıfın skoru

Her örnek için doğru sınıfın olasılığını almak, kayıp hesaplarında sık yapılır. gather her satırdan verilen sütun indeksini seçer; gelişmiş indeksleme de aynı işi görür:

p = torch.tensor([[0.7, 0.2, 0.1], [0.1, 0.1, 0.8]])
y = torch.tensor([0, 2])
print(p.gather(1, y.unsqueeze(1)).squeeze(1).tolist())   # [0.7..., 0.8...]
print(p[torch.arange(2), y].tolist())                   # aynısı

Kayan nokta değerleri yazdırılırken round kullanmak çıktıyı okunur yapar.

Uygulama Doğruluk hesabı

Verilen logitlerden tahmin edilen sınıfları argmax(dim=1) ile al ve tolist() ile yazdır. Doğruluğu (tahmin == y).float().mean().item() ile, ardından doğru sınıfların logitlerini logit[torch.arange(len(y)), y].tolist() ile yazdır.

Başlangıç kodu

model.py
import torch

logit = torch.tensor([[2., 1., 0.], [0., 3., 1.], [1., 0., 4.], [5., 1., 2.]])
y = torch.tensor([0, 1, 1, 0])

# buraya yaz

Örnek çözüm

model.py
import torch

logit = torch.tensor([[2., 1., 0.], [0., 3., 1.], [1., 0., 4.], [5., 1., 2.]])
y = torch.tensor([0, 1, 1, 0])

tahmin = logit.argmax(dim=1)
print(tahmin.tolist())
print((tahmin == y).float().mean().item())
print(logit[torch.arange(len(y)), y].tolist())

Beklenen çıktı

[0, 1, 2, 0]
0.75
[2.0, 3.0, 0.0, 5.0]

Soru ve cevaplar

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

1 Yukarıdaki <code>x</code> için <code>x.argmax(dim=1).tolist()</code> neyi verir?

  • [0, 1, 2]
  • [2, 5, 8]
  • 8
  • [2, 2, 2] Doğru cevap

Açıklama: Her satırda en büyük değer son sütundadır (indeks 2).

2 Her satırın en büyük değerinin indeksini al.

Soru
tahmin = cikti.____(dim=1)
Cevap
tahmin = cikti.argmax(dim=1)

Açıklama: argmax(dim=1) sınıf tahminini verir.

3 İfadeleri eşleştir.

Kavram Anlamı
x[:, 0] İlk sütun
x[x > 0] Maskeyle seçim
argmax(dim=1) Satır başına en büyük
gather Satır başına indeksli seçim

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