CodeBlanks Logo Icon CodeBlanks

Reshape

reshape() ve view() ile tensor boyutu değiştirilir.

Reshape ve view

reshape ve view eleman sayısını koruyarak şekli değiştirir; -1 boyutu otomatik hesaplatır. view yalnızca bellekte bitişik tensörlerde çalışır ve her zaman veriyi paylaşır; reshape gerekirse kopyalar:

x = torch.arange(12)
print(x.view(3, 4).shape)        # torch.Size([3, 4])
print(x.reshape(2, -1).shape)    # torch.Size([2, 6])
img = torch.zeros(32, 1, 28, 28)
print(img.view(32, -1).shape)    # torch.Size([32, 784]): düzleştirme

Şüphedeysen reshape kullan; her durumda çalışır.

Transpoz ve permute

transpose(a, b) iki ekseni, permute tüm eksenlerin sırasını değiştirir. Görüntüler NumPy/PIL'de (yükseklik, genişlik, kanal), PyTorch'ta (kanal, yükseklik, genişlik) düzenindedir:

hwc = torch.zeros(28, 28, 3)
chw = hwc.permute(2, 0, 1)
print(chw.shape)               # torch.Size([3, 28, 28])
print(chw.is_contiguous())     # False: view yerine reshape gerekebilir

permute sonrası tensör bitişik olmaz; .contiguous() ile düzeltilir.

Uygulama Görüntü şekilleri

(4, 28, 28, 3) şekilli bir HWC görüntü grubunu permute(0, 3, 1, 2) ile NCHW'ye çevir ve şeklini yazdır. Ardından bunu reshape(4, -1) ile düzleştirip şeklini, son olarak x.flatten(1) sonucunun şekliyle aynı olduğunu yazdır.

Başlangıç kodu

model.py
import torch

nhwc = torch.zeros(4, 28, 28, 3)

# buraya yaz

Örnek çözüm

model.py
import torch

nhwc = torch.zeros(4, 28, 28, 3)

x = nhwc.permute(0, 3, 1, 2)
print(x.shape)
d = x.reshape(4, -1)
print(d.shape)
print(d.shape == x.flatten(1).shape)

Beklenen çıktı

torch.Size([4, 3, 28, 28])
torch.Size([4, 2352])
True

Soru ve cevaplar

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

1 (8, 3, 4, 4) şekilli tensörde <code>x.view(8, -1)</code> hangi şekli verir?

  • (8, 48) Doğru cevap
  • (8, 12)
  • (8, 3)
  • (384,)

Açıklama: 3 × 4 × 4 = 48; toplu boyut korunur.

2 Görüntüyü HWC'den CHW'ye çevir.

Soru
chw = hwc.____(2, 0, 1)
Cevap
chw = hwc.permute(2, 0, 1)

Açıklama: permute eksenlerin yeni sırasını alır.

3 İşlemleri eşleştir.

Kavram Anlamı
view Paylaşımlı yeniden şekil
reshape Gerekirse kopyalar
permute Eksen sırası
flatten(1) Toplu boyut dışını düzleştirir

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