網站首頁 編程語言 正文
一. torch.stack()函數解析
1. 函數說明:
1.1 官網:torch.stack(),函數定義及參數說明如下圖所示:
1.2 函數功能
沿一個新維度對輸入一系列張量進行連接,序列中所有張量應為相同形狀,stack 函數返回的結果會新增一個維度。也即是把多個2維的張量湊成一個3維的張量;多個3維的湊成一個4維的張量…以此類推,也就是在增加新的維度上面進行堆疊。
1.3 參數列表
- tensors :為一系列輸入張量,類型為turple和List
- dim :新增維度的(下標)位置,當dim = -1時默認最后一個維度;范圍必須介于 0 到輸入張量的維數之間,默認是dim=0,在第0維進行連接
- 返回值:輸出新增維度后的張量
2. 代碼舉例
2.1 dim = 0 : 在第0維進行連接,相當于在行上進行組合(輸入張量為一維,輸出張量為兩維)
import torch
#二維輸入張量a,b
a = torch.tensor([1, 2, 3])
b = torch.tensor([11, 22, 33])
c = torch.stack([a, b],dim=0)#在第0維進行連接,相當于在行上進行組合(輸入張量為一維,輸出張量為兩維)
print(a)
print(b)
print(c)
輸出結果如下:
tensor([1, 2, 3])
tensor([11, 22, 33])
tensor([[ 1, ?2, ?3],
? ? ? ? [11, 22, 33]])
2.2 dim = 1 :在第1維進行連接,相當于在對應行上面對列元素進行組合(輸入張量為一維,輸出張量為兩維)
import torch
#二維輸入張量a,b
a = torch.tensor([1, 2, 3])
b = torch.tensor([11, 22, 33])
c = torch.stack([a, b],dim=1)#在第1維進行連接,相當于在對應行上面對列元素進行組合(輸入張量為一維,輸出張量為兩維)
print(a)
print(b)
print(c)
輸出結果如下:
tensor([1, 2, 3])
tensor([11, 22, 33])
tensor([[ 1, 11],
? ? ? ? [ 2, 22],
? ? ? ? [ 3, 33]])
2.3 dim=0:表示在第0維進行連接,相當于在通道維度上進行組合(輸入張量為兩維,輸出張量為三維),注意:此處輸入張量維度為二維,因此dim最大只能為2。
import torch
#二維輸入張量a,b
a = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = torch.tensor([[11, 22, 33], [44, 55, 66], [77, 88, 99]])
c = torch.stack([a, b],dim=0)#在第0維進行連接,相當于在通道維度上進行組合(輸入張量為兩維,輸出張量為三維)
print(a)
print(b)
print(c)
輸出結果如下所示:
tensor([[1, 2, 3],
? ? ? ? [4, 5, 6],
? ? ? ? [7, 8, 9]])
tensor([[11, 22, 33],
? ? ? ? [44, 55, 66],
? ? ? ? [77, 88, 99]])
tensor([[[ 1, ?2, ?3],
? ? ? ? ?[ 4, ?5, ?6],
? ? ? ? ?[ 7, ?8, ?9]],? ? ? ? [[11, 22, 33],
? ? ? ? ?[44, 55, 66],
? ? ? ? ?[77, 88, 99]]])
2.4 dim=1:表示在第1維進行連接,相當于對相應通道中每個行進行組合,注意:此處輸入張量維度為二維,因此dim最大只能為2。
import torch
#二維輸入張量a,b
a = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = torch.tensor([[11, 22, 33], [44, 55, 66], [77, 88, 99]])
c = torch.stack([a, b], 1)#在第1維進行連接,相當于對相應通道中每個行進行組合
print(a)
print(b)
print(c)
輸出結果如下所示:
tensor([[1, 2, 3],
? ? ? ? [4, 5, 6],
? ? ? ? [7, 8, 9]])
tensor([[11, 22, 33],
? ? ? ? [44, 55, 66],
? ? ? ? [77, 88, 99]])
tensor([[[ 1, ?2, ?3],
? ? ? ? ?[11, 22, 33]],? ? ? ? [[ 4, ?5, ?6],
? ? ? ? ?[44, 55, 66]],? ? ? ? [[ 7, ?8, ?9],
? ? ? ? ?[77, 88, 99]]])
2.5 dim=2:表示在第2維進行連接,相當于對相應行中每個列元素進行組合,注意:此處輸入張量維度為二維,因此dim最大只能為2。
import torch
#二維輸入張量a,b
a = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = torch.tensor([[11, 22, 33], [44, 55, 66], [77, 88, 99]])
c = torch.stack([a, b], 2)#在第2維進行連接,相當于對相應行中每個列元素進行組合
print(a)
print(b)
print(c)
輸出結果如下所示:
tensor([[1, 2, 3],
? ? ? ? [4, 5, 6],
? ? ? ? [7, 8, 9]])
tensor([[11, 22, 33],
? ? ? ? [44, 55, 66],
? ? ? ? [77, 88, 99]])
tensor([[[ 1, 11],
? ? ? ? ?[ 2, 22],
? ? ? ? ?[ 3, 33]],? ? ? ? [[ 4, 44],
? ? ? ? ?[ 5, 55],
? ? ? ? ?[ 6, 66]],? ? ? ? [[ 7, 77],
? ? ? ? ?[ 8, 88],
? ? ? ? ?[ 9, 99]]])
2.6 dim=3:表示在第3維進行連接,相當于對相應行中每個列元素進行組合(輸入維度大小為3維,因此dim=3最后一維始終代表為列),注意:此處輸入張量維度為三維,因此dim最大只能為3。
import torch
#三維輸入張量a,b
a = torch.tensor([[[1, 2, 3], [4, 5, 6], [7, 8, 9]],[[10, 20, 30], [40, 50, 60], [70, 80, 90]]])
b = torch.tensor([[[11, 22, 33], [44, 55, 66], [77, 88, 99]], [[110, 220, 330], [440, 550, 660], [770, 880, 990]]])
c = torch.stack([a, b], 3)#表示在第3維進行連接,相當于對相應行中每個列元素進行組合(最后一維是第三維,始終代表為列)
print(a)
print(b)
print(c)
輸出結果如下所示:
tensor([[[ 1, ?2, ?3],
? ? ? ? ?[ 4, ?5, ?6],
? ? ? ? ?[ 7, ?8, ?9]],? ? ? ? [[10, 20, 30],
? ? ? ? ?[40, 50, 60],
? ? ? ? ?[70, 80, 90]]])
tensor([[[ 11, ?22, ?33],
? ? ? ? ?[ 44, ?55, ?66],
? ? ? ? ?[ 77, ?88, ?99]],? ? ? ? [[110, 220, 330],
? ? ? ? ?[440, 550, 660],
? ? ? ? ?[770, 880, 990]]])
tensor([[[[ ?1, ?11],
? ? ? ? ? [ ?2, ?22],
? ? ? ? ? [ ?3, ?33]],? ? ? ? ?[[ ?4, ?44],
? ? ? ? ? [ ?5, ?55],
? ? ? ? ? [ ?6, ?66]],? ? ? ? ?[[ ?7, ?77],
? ? ? ? ? [ ?8, ?88],
? ? ? ? ? [ ?9, ?99]]],
? ? ? ? [[[ 10, 110],
? ? ? ? ? [ 20, 220],
? ? ? ? ? [ 30, 330]],? ? ? ? ?[[ 40, 440],
? ? ? ? ? [ 50, 550],
? ? ? ? ? [ 60, 660]],? ? ? ? ?[[ 70, 770],
? ? ? ? ? [ 80, 880],
? ? ? ? ? [ 90, 990]]]])
2.7 dim=4 (錯誤維度:因為此處輸入張量維度為三維,所以dim最大只能為3,此處維度為4,因此會報錯)
import torch
#三維輸入張量a,b
a = torch.tensor([[[1, 2, 3], [4, 5, 6], [7, 8, 9]],[[10, 20, 30], [40, 50, 60], [70, 80, 90]]])
b = torch.tensor([[[11, 22, 33], [44, 55, 66], [77, 88, 99]], [[110, 220, 330], [440, 550, 660], [770, 880, 990]]])
c = torch.stack([a, b], 4)
print(a)
print(b)
print(c)
輸出錯誤:
IndexError: Dimension out of range (expected to be in range of [-4, 3], but got 4)
總結
原文鏈接:https://blog.csdn.net/flyingluohaipeng/article/details/125034358
相關推薦
- 2023-04-10 Android序列化接口Parcelable與Serializable接口對比_Android
- 2022-03-23 Android應用內懸浮窗Activity的簡單實現_Android
- 2022-07-25 基于?Redis?實現接口限流的方式_Redis
- 2022-03-16 Redis在項目中的使用(JedisPool方式)_Redis
- 2022-05-24 淺談C#中Action和Func回調的常用方式_C#教程
- 2022-05-24 Python函數之zip函數的介紹與實際應用_python
- 2022-09-12 shell腳本5種執行方式及腳本不同的執行方法和區別詳解_linux shell
- 2022-06-27 nginx中配置使用proxy?protocol協議的全過程_nginx
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支