CodeBlanks Logo Icon CodeBlanks

Shape

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))           # 32

Bir ş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ütun

Yayı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

model.py
import torch

v = torch.arange(4.)

# buraya yaz

Örnek çözüm

model.py
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.

Soru
xb = x.____(0)
Cevap
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

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