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