Veri hazırlama
- Makine Öğrenmesi kursu
- İleri seviye
- Ders 59/78
- 7 dk
Görüntü verisini tensor'a dönüştürürsün.
Proje: yatay ve dikey çizgiler
Bu projede küçük bir CNN'e 16×16 gri görüntülerde yatay ve dikey çizgileri ayırmayı öğreteceğiz. Veriyi kendimiz üretiyoruz: hafif gürültülü bir arka plan üzerine ortadan geçen kalın bir çizgi. Sınıf 0 yatay, sınıf 1 dikey çizgidir:
X = torch.rand(n, 1, 16, 16) * 0.3 # gürültülü arka plan
# sınıf 0: X[k, 0, 7:9, :] += 1 -> yatay bant
# sınıf 1: X[k, 0, :, 7:9] += 1 -> dikey bantSentetik veri, gerçek bir görüntü setine geçmeden önce kodun ve şekillerin doğru olduğunu hızlıca sınamanın iyi bir yoludur.
Veriyi denetlemek
Eğitimden önce veri denetlenir: şekil, sınıf dengesi ve bir örneğin gerçekten beklenen deseni taşıyıp taşımadığı. Yatay çizgide orta satırların ortalaması, dikeyde orta sütunlarınki yüksektir:
print(X_train.shape, torch.bincount(y_train).tolist())
k = (y_train == 0).nonzero()[0].item() # ilk yatay örnek
print(X_train[k, 0, 7:9].mean().item() > X_train[k, 0, :, 7:9].mean().item())Sınıflar yaklaşık dengeli olduğu için doğruluk burada anlamlı bir metriktir.
Uygulama Veriyi incele
Eğitim verisinin şeklini yazdır. İlk yatay örnek için orta satırların ortalamasının orta sütunlarınkinden büyük olduğunu, ilk dikey örnek için tersini aynı satırda yazdır.
Başlangıç kodu
import torch
from torch import nn
torch.manual_seed(0)
def veri(n):
X = torch.rand(n, 1, 16, 16) * 0.3
y = torch.randint(0, 2, (n,))
for k in range(n):
if y[k] == 0:
X[k, 0, 7:9, :] += 1.0
else:
X[k, 0, :, 7:9] += 1.0
return X, y
X_train, y_train = veri(256)
X_test, y_test = veri(64)
# buraya yazÖrnek çözüm
import torch
from torch import nn
torch.manual_seed(0)
def veri(n):
X = torch.rand(n, 1, 16, 16) * 0.3
y = torch.randint(0, 2, (n,))
for k in range(n):
if y[k] == 0:
X[k, 0, 7:9, :] += 1.0
else:
X[k, 0, :, 7:9] += 1.0
return X, y
X_train, y_train = veri(256)
X_test, y_test = veri(64)
print(X_train.shape)
k0 = (y_train == 0).nonzero()[0].item()
k1 = (y_train == 1).nonzero()[0].item()
a = X_train[k0, 0, 7:9].mean() > X_train[k0, 0, :, 7:9].mean()
b = X_train[k1, 0, :, 7:9].mean() > X_train[k1, 0, 7:9].mean()
print(a.item(), b.item())Beklenen çıktı
torch.Size([256, 1, 16, 16]) True True
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Görüntü tensörünün şekli neden (n, 1, 16, 16)'dır?
- Rastgele seçilmiştir
- Doğrusal katman için
- RNN için
- Conv2d (örnek, kanal, yükseklik, genişlik) ister; gri görüntü tek kanallıdır Doğru cevap
Açıklama: Renkli görüntüde kanal sayısı 3 olurdu.
2 Sınıf sayımlarını al.
print(torch.____(y_train).tolist())
print(torch.bincount(y_train).tolist())
Açıklama: torch.bincount negatif olmayan tam sayıları sayar.
3 Veri parçalarını eşleştir.
| Kavram | Anlamı |
|---|---|
torch.rand(...) * 0.3 |
Gürültülü arka plan |
X[k, 0, 7:9, :] |
Yatay bant |
X[k, 0, :, 7:9] |
Dikey bant |
torch.randint(0, 2, (n,)) |
Rastgele etiketler |