pytorch教程龙曲良16-20
17維度變換4
.t 轉置,但是只適合2d的矩陣,其他會報錯
a.shape#[3,4] a.t() a.shape#[4,3]
transpose
加粗樣式
permute
因為transpose是兩兩交換,比如BCHW,13交換變BWHC,但是希望HW保持不變,所以再12交換變BHWC,所以需要兩次transpose,permute給定index可以實現任意交換
18broadcast1
自動擴展,先在大維度上擴張,[B,C,H,W]維度大–>小,然后在維度長度為1的地方擴張
在圖中③的情況中,A[3,1]先在小維度上1擴張成3橫著擴張,B[1,3]在大維度上擴張1變成3豎著擴張
所以broadcast相當于是unsqueeze和expand的結合,先在維度上擴張然后在某維度的尺寸上擴張
為什么需要broadcasting
1滿足實際需求: 因為希望某個向量可以和某個標量直接相加,省去自己寫多個unsqueeze和expand接口的麻煩
2節省內存計算:如果使用repeat不使用expand接口會將標量[1]擴展成[4,32,8]4328=1024這樣擴大內存,broadcasting可以節約內存
19 broadcasting-2
什么時候可以用broadicasting
假設[class,student,score],[4,32,8]4個班級32個學生8門課,每門成績加5分即一個標量[1],即實現A和B兩個不同維度向量的相加,用broadcasting
情況1只需要復制
情況2
情況3不符合broadcast,需要手動提取出B[0],B[0].shape是[32,14,14] 手動在[32,14,14] 擴展
默認從最小維度匹配
+[32,32]可能是要給圖片增加base基底可能讓圖片平移一部分
+[3,1,1] 對RGB三個通道分別加上不同的值,彌補一部分屬性
+[1,1,1,1] 相當于是[1] ,給每個像素點加一個固定的值
20合并與分割1
Merge or split
? Cat
? Stack
? Split#按照長度拆分
? Chunk#按照數量拆分
cat
torch.cat([a,b],dim=0).shape#[a,b]第一個參數是合并list,第二個參數dim=0是在哪個維度上合并
對于拼接的維度可以不同,但是非cat的維度上必須保持一致
example
stack
create new dim
兩個向量進行拼接ab都是[32,8] ,表示ab兩個班級32個學生的8門成績
用cat就是[64,8],這樣丟失了2個班級的信息
用stack就是[2,32,8]創建一個新的維度,
但是stack就是必須兩個tensor完全一樣,cat允許在連接的dim上尺寸不一樣
總結
以上是生活随笔為你收集整理的pytorch教程龙曲良16-20的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch教程龙曲良11-15
- 下一篇: pytorch教程龙曲良21-25