Garfield
YZF Admin
PyTorch’ta
Bu örnekte iki tensörün şekli de
Dolayısıyla “hangi eksende birleştirilir?” sorusunun cevabı sabit değildir: eksen,
Örneğin
Buna karşılık
Aşağıdaki örnek, iki boyutlu tensörlerde
Üç veya daha fazla boyutlu tensörlerde “satır” ve “sütun” ifadeleri tek başına yeterli olmayabilir. Bu durumda önce tensörün şeklini inceleyin:
Ardından büyütmek istediğiniz boyutu
Örneğin iki adet
torch.cat(), tensörleri seçtiğiniz dim ekseni boyunca birleştirir. Birleştirilmeyen diğer eksenlerdeki boyutlar aynı olmalıdır. İki boyutlu tensörlerde dim=0 satırları, dim=1 sütunları birleştirir. Sonuçta eksen sayısı değişmez; yalnızca seçilen eksenin boyutu büyür.Temel kullanım
Python:
import torch
a = torch.tensor([[1, 2],
[3, 4]])
b = torch.tensor([[5, 6],
[7, 8]])
satirlar = torch.cat((a, b), dim=0)
sutunlar = torch.cat((a, b), dim=1)
print(satirlar)
print(sutunlar)
Bu örnekte iki tensörün şekli de
(2, 2) değerindedir. dim=0 seçildiğinde satır ekseni boyunca birleşir ve sonuç şekli (4, 2) olur:
Kod:
tensor([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
dim=1 seçildiğinde sütun ekseni boyunca birleşir ve sonuç şekli (2, 4) olur:
Kod:
tensor([[1, 2, 5, 6],
[3, 4, 7, 8]])
Dolayısıyla “hangi eksende birleştirilir?” sorusunun cevabı sabit değildir: eksen,
dim parametresiyle belirlenir.Şekil uyumluluğu nasıl kontrol edilir?
torch.cat((x, y), dim=k) kullanırken tensörlerin k dışındaki bütün eksenlerde aynı boyuta sahip olması gerekir. Birleştirme yapılan eksenin boyutu ise farklı olabilir.Örneğin
(2, 3) ve (4, 3) şekilli tensörler dim=0 ile birleştirilebilir; çünkü ikinci eksen olan sütun sayısı ikisinde de 3 değerindedir. Sonuç şekli (6, 3) olur.Buna karşılık
(2, 3) ve (4, 2) tensörleri dim=0 ile birleştirilemez. Birleştirilmeyen sütun eksenlerinin boyutları 3 ve 2 olduğu için boyut uyumsuzluğu hatası alınır.Eksen seçimi için kısa karşılaştırma
Aşağıdaki örnek, iki boyutlu tensörlerde
dim değerinin sonucu nasıl değiştirdiğini gösterir.| Kullanım | Birleşen eksen | Örnek sonuç şekli |
|---|---|---|
torch.cat((a, b), dim=0) | 0. eksen, genellikle satırlar | (4, 2) |
torch.cat((a, b), dim=1) | 1. eksen, genellikle sütunlar | (2, 4) |
torch.cat((a, b), dim=-1) | Son eksen | İki boyutlu tensörde dim=1 ile aynı |
Python:
x = torch.zeros(2, 3, 4)
y = torch.zeros(2, 3, 5)
print(x.shape)
print(y.shape)
Ardından büyütmek istediğiniz boyutu
dim olarak seçin. Negatif eksen numaraları sondan sayılır; dim=-1 son ekseni, dim=-2 sondan ikinci ekseni belirtir.cat ile stack arasındaki fark
torch.cat() mevcut eksenlerden birinin boyutunu büyütür ve tensörün boyut sayısını değiştirmez. torch.stack() ise tensörleri yeni bir eksen ekleyerek birleştirir.Örneğin iki adet
(2, 3) tensör için cat(..., dim=0) sonucu (4, 3) olur. stack(..., dim=0) sonucu ise (2, 2, 3) olur. Aynı şekle sahip örnekleri yeni bir grup veya yığın boyutunda tutmak istiyorsanız stack; var olan satır, sütun ya da başka bir eksen boyunca devam ettirmek istiyorsanız cat kullanın.