日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pytorch教程龙曲良16-20

發布時間:2024/4/13 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pytorch教程龙曲良16-20 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

17維度變換4

.t 轉置,但是只適合2d的矩陣,其他會報錯

a.shape#[3,4] a.t() a.shape#[4,3]


transpose
加粗樣式

a.shape#[4,3,32,32] BCHW a1=a.transpose(1,3).view(4,3*32*32).view(4,3,32,32)#報錯 1,3維度長度交換,變成BWHC #第一個view把后三個維度合并變B【WHC】 #第二個view展開,但是給的維度是BCHW,可是現在是B【WHC】不符合W和C的值 #用contiguous保持連續的,因為轉置后行變列數據不連續, a1=a.transpose(1,3).contiguous().view(4,3*32*32).view(4,3,32,32) #1,3維度長度交換,變成BWHC #第一個view把后三個維度合并變B【WHC】 #第二個view展開,但是給的維度是BCHW,可是現在是B【WHC】不符合W和C的值,造成數據污染a2=a.transpose(1,3).contiguous().view(4,3*32*32).view(4,32,32,3) #1,3維度長度交換,變成BWHC #第一個view把后三個維度合并變B【WHC】 #第二個view展開給的維度是BWHC,符合 #再把1,3維度轉置交換,即恢復成BCHW和a一樣torch.all(torch.eq(a,a1))#eq判斷內容是否一致,all確保所有數據內容一致,0,a和a1不一致 torch.all(torch.eq(a,a2))#1,a和a2一致

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

A [4,32,8]B [1]B1[1,1,1] 先從后往前擴展成一樣的維度B2[4,32,8] 先從后往前擴展成一樣的維度長度實現相加A [4,32,8]B [8]#一個長度為8的向量[0,0,5,0,0..]可能只要某特定一門加5分B1 [1,1,8] 先從后往前擴展成一樣的維度B2 [4,32,8] 先從后往前擴展成一樣的維度長度實現相加A [4,32,8]B [4]#一個長度為4的向量[0,0,5,0]可能只要某特定一門加5分,但是一共有8門課,不符合實際沒意義,所以不能用broadcast

情況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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。