Shape
- Makine Öğrenmesi kursu
- İleri seviye
- Ders 14/78
- 5 dk
Tensor'ın shape'i boyut bilgisini verir.
Shape
Şekil hataları derin öğrenmedeki en sık hatalardır. Katmanlar belirli şekiller bekler: nn.Linear son boyutta özellik, nn.Conv2d (örnek, kanal, yükseklik, genişlik) ister.
x = torch.zeros(32, 3, 28, 28)
print(x.shape) # torch.Size([32, 3, 28, 28])
print(x.shape[0]) # 32: toplu veri boyutu
print(x.size(1)) # 3: kanal
print(len(x)) # 32Bir şey ters gidince ilk iş, işlemden önce ve sonra shape'i yazdırmaktır.
Boyut ekleme ve çıkarma
unsqueeze 1 boyutlu yeni bir eksen ekler, squeeze 1 boyutlu eksenleri kaldırır. Tek bir örneği modele vermek için toplu veri boyutu eklemek tipik bir kullanımdır:
x = torch.zeros(3, 28, 28) # tek görüntü
xb = x.unsqueeze(0) # (1, 3, 28, 28)
print(xb.squeeze(0).shape) # torch.Size([3, 28, 28])
v = torch.tensor([1., 2., 3.])
print(v.unsqueeze(1).shape) # torch.Size([3, 1]): sütunYayınlama hatalarının çoğu eksik bir unsqueeze yüzünden olur.
Uygulama Şekil takibi
v = torch.arange(4.) için v.unsqueeze(0).shape ve v.unsqueeze(1).shape değerlerini alt alta yazdır. Ardından v.unsqueeze(0) + v.unsqueeze(1) yayınlamasının şeklini ve son satırını tolist() ile yazdır.
Başlangıç kodu
import torch
v = torch.arange(4.)
# buraya yazÖrnek çözüm
import torch
v = torch.arange(4.)
print(v.unsqueeze(0).shape)
print(v.unsqueeze(1).shape)
m = v.unsqueeze(0) + v.unsqueeze(1)
print(m.shape)
print(m[-1].tolist())Beklenen çıktı
torch.Size([1, 4]) torch.Size([4, 1]) torch.Size([4, 4]) [3.0, 4.0, 5.0, 6.0]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 (16, 10) şekilli bir tensörü <code>nn.Linear(10, 4)</code> katmanından geçirince çıktının şekli nedir?
- (16, 10)
- (4, 16)
- (16, 4) Doğru cevap
- (10, 4)
Açıklama: Doğrusal katman yalnızca son boyutu değiştirir: 10 → 4.
2 Tek görüntüye toplu veri boyutu ekle.
xb = x.____(0)
xb = x.unsqueeze(0)
Açıklama: unsqueeze(0) en başa 1 boyutlu bir eksen ekler.
3 Şekilleri eşleştir (x: 3×28×28).
| Kavram | Anlamı |
|---|---|
x.unsqueeze(0) |
(1, 3, 28, 28) |
x.shape[0] |
3 |
x.unsqueeze(0).squeeze() |
(3, 28, 28) |
x.numel() |
2352 |