11_拼接与拆分,cat,stack,split,chunk
生活随笔
收集整理的這篇文章主要介紹了
11_拼接与拆分,cat,stack,split,chunk
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.11.拼接與拆分
1.11.1.cat
1.11.2.Stack
1.11.3.split
1.11.4.chunk
1.11.拼接與拆分
1.11.1.cat
?numpy中使用concat,在pytorch中使用更加簡寫的 cat
?完成一個拼接
?兩個向量維度相同,想要拼接的維度上的值可以不同,但是其它維度上的值必須相同。
舉個例子:還是按照前面的,想將這兩組班級的成績合并起來
a[class 1-4, students, scores]
b[class 5-9, students, scores]
理解cat:
?行拼接:[4, 4] 與 [5, 4] 以 dim=0(行)進行拼接 —> [9, 4] 9個班的成績合起來。
?列拼接:[4, 5] 與 [4, 3] 以 dim=1(列)進行拼接 —> [4, 8] 每個班合成8項成績
理解Cat
# -*- coding: UTF-8 -*-import torcha1 = torch.rand(4, 3, 32, 32) a2 = torch.rand(5, 3, 32, 32) print(torch.cat([a1, a2], dim=0).shape) # 合并第1維 理解上相當于合并batch """ 輸出結果:torch.Size([9, 3, 32, 32]) """a2 = torch.rand(4, 1, 32, 32) print(torch.cat([a1,a2],dim=1).shape) # 合并第2維 理解上相當于合并為 rgba """ 輸出結果:torch.Size([4, 4, 32, 32]) """a1 = torch.rand(4, 3, 16, 32) a2 = torch.rand(4, 3, 16, 32) print(torch.cat([a1, a2], dim=3).shape) # 合并第3維 理解上相當于合并照片的上下兩半 """ 輸出結果:torch.Size([4, 3, 16, 64]) """a1 = torch.rand(4, 3, 32, 32) print(torch.cat([a1, a2], dim=0).shape) """ RuntimeError: Sizes of tensors must match except in dimension 0. Got 32 and 16 in dimension 2 (The offending index is 1) """1.11.2.Stack
?創造一個新的維度(代表了新的組別)
?要求兩個tensor的size完全相同
1.11.3.split
?按長度進行拆分:單元長度/數量
?長度相同給一個固定值
?長度不同給一個列表
1.11.4.chunk
?按照量進行拆分
# -*- coding: UTF-8 -*-import torcha = torch.rand(32, 8) b = torch.rand(32, 8) c = torch.rand(32, 8) d = torch.rand(32, 8) e = torch.rand(32, 8) f = torch.rand(32, 8) s = torch.stack([a, b, c, d, e, f], dim=0) print(s.shape) """ 輸出結果:torch.Size([6, 32, 8]) """aa, bb = s.chunk(2, dim=0) print(aa.shape, bb.shape) """ 輸出結果:torch.Size([3, 32, 8]) torch.Size([3, 32, 8]) """cc, dd = s.split(3, dim=0) print(cc.shape, dd.shape) """ 輸出結果:torch.Size([3, 32, 8]) torch.Size([3, 32, 8]) """注意:對于按數量切分:chunk中的參數是要切成幾份;split的常量是每份有幾個。
總結
以上是生活随笔為你收集整理的11_拼接与拆分,cat,stack,split,chunk的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 08_索引与切片,Indexing,Py
- 下一篇: 初中想竞选班长但身上本来就有职务该怎么办