好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 聊聊Pytorch torch.cat與torch.stack的區別

聊聊Pytorch torch.cat與torch.stack的區別

熱門標簽:江西省地圖標注 富錦商家地圖標注 如何申請400電話費用 沈陽外呼系統呼叫系統 武漢外呼系統平臺 外呼系統哪些好辦 池州外呼調研線路 沈陽人工外呼系統價格 沈陽防封電銷卡品牌

torch.cat()函數可以將多個張量拼接成一個張量。torch.cat()有兩個參數,第一個是要拼接的張量的列表或是元組;第二個參數是拼接的維度。

torch.cat()的示例如下圖1所示

圖1 torch.cat()

torch.stack()函數同樣有張量列表和維度兩個參數。stack與cat的區別在于,torch.stack()函數要求輸入張量的大小完全相同,得到的張量的維度會比輸入的張量的大小多1,并且多出的那個維度就是拼接的維度,那個維度的大小就是輸入張量的個數。

torch.stack()的示例如下圖2所示:

圖2 torch.stack()

補充:torch.stack()的官方解釋,詳解以及例子

可以直接看最下面的【3.例子】,再回頭看前面的解釋

在pytorch中,常見的拼接函數主要是兩個,分別是:

1、stack()

2、cat()

實際使用中,這兩個函數互相輔助:關于cat()參考torch.cat(),但是本文主要說stack()。

函數的意義:使用stack可以保留兩個信息:[1. 序列] 和 [2. 張量矩陣] 信息,屬于【擴張再拼接】的函數。

形象的理解:假如數據都是二維矩陣(平面),它可以把這些一個個平面(矩陣)按第三維(例如:時間序列)壓成一個三維的立方體,而立方體的長度就是時間序列長度。

該函數常出現在自然語言處理(NLP)和圖像卷積神經網絡(CV)中。

1. stack()

官方解釋:沿著一個新維度對輸入張量序列進行連接。 序列中所有的張量都應該為相同形狀。

淺顯說法:把多個2維的張量湊成一個3維的張量;多個3維的湊成一個4維的張量…以此類推,也就是在增加新的維度進行堆疊。

outputs = torch.stack(inputs, dim=?) → Tensor

參數

inputs : 待連接的張量序列。

注:python的序列數據只有list和tuple。

dim : 新的維度, 必須在0到len(outputs)之間。

注:len(outputs)是生成數據的維度大小,也就是outputs的維度值。

2. 重點

函數中的輸入inputs只允許是序列;且序列內部的張量元素,必須shape相等

----舉例:[tensor_1, tensor_2,..]或者(tensor_1, tensor_2,..),且必須tensor_1.shape == tensor_2.shape

dim是選擇生成的維度,必須滿足0=dimlen(outputs);len(outputs)是輸出后的tensor的維度大小

不懂的看例子,再回過頭看就懂了。

3. 例子

1.準備2個tensor數據,每個的shape都是[3,3]

# 假設是時間步T1的輸出
T1 = torch.tensor([[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]])
# 假設是時間步T2的輸出
T2 = torch.tensor([[10, 20, 30],
          [40, 50, 60],
          [70, 80, 90]])

2.測試stack函數

print(torch.stack((T1,T2),dim=0).shape)
print(torch.stack((T1,T2),dim=1).shape)
print(torch.stack((T1,T2),dim=2).shape)
print(torch.stack((T1,T2),dim=3).shape)
# outputs:
torch.Size([2, 3, 3])
torch.Size([3, 2, 3])
torch.Size([3, 3, 2])
'選擇的dim>len(outputs),所以報錯'
IndexError: Dimension out of range (expected to be in range of [-3, 2], but got 3)

可以復制代碼運行試試:拼接后的tensor形狀,會根據不同的dim發生變化。

dim shape
0 [2, 3, 3]
1 [3, 2, 3]
2 [3, 3, 2]
3 溢出報錯

4. 總結

1、函數作用:

函數stack()對序列數據內部的張量進行擴維拼接,指定維度由程序員選擇、大小是生成后數據的維度區間。

2、存在意義:

在自然語言處理和卷及神經網絡中, 通常為了保留–[序列(先后)信息] 和 [張量的矩陣信息] 才會使用stack。

函數存在意義?》》》

手寫過RNN的同學,知道在循環神經網絡中輸出數據是:一個list,該列表插入了seq_len個形狀是[batch_size, output_size]的tensor,不利于計算,需要使用stack進行拼接,保留–[1.seq_len這個時間步]和–[2.張量屬性[batch_size, output_size]]。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 淺談pytorch中stack和cat的及to_tensor的坑
  • 對PyTorch torch.stack的實例講解
  • PyTorch的torch.cat用法
  • PyTorch中torch.tensor與torch.Tensor的區別詳解

標簽:銅川 株洲 常德 呂梁 通遼 黑龍江 潛江 阿里

巨人網絡通訊聲明:本文標題《聊聊Pytorch torch.cat與torch.stack的區別》,本文關鍵詞  聊聊,Pytorch,torch.cat,與,torch.stack,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《聊聊Pytorch torch.cat與torch.stack的區別》相關的同類信息!
  • 本頁收集關于聊聊Pytorch torch.cat與torch.stack的區別的相關信息資訊供網民參考!
  • 推薦文章