一、tensor的基礎知識
在探討如何增加維度之前,我們需要先回顧一下tensor的基礎知識。tensor是PyTorch中的基礎數據結構,可以看作是多維數組。舉個例子,一個標量可以被視為一個零維的tensor,而一個向量可以被視為一個一維tensor,一個矩陣可以被視為一個二維tensor,類推。
在PyTorch中,我們可以通過torch.Tensor創建張量,例如:
import torch
a = torch.Tensor([[1,2,3],[4,5,6],[7,8,9]])
上述代碼創建了一個二維的大小為3×3的張量,包含了從1到9的數字。接下來,我們將圍繞如何增加張量的維度展開討論。
二、增加維度的方式
在PyTorch中,我們可以使用不同的函數來增加一個張量的維度。下面介紹三種常用的方式。
1. 使用unsqueeze函數增加維度
使用unsqueeze函數可以在張量中插入新的維度。unsqueeze函數的參數是插入的維度下標,下標從0開始計數。例如,下面的代碼在a的第一維度(即行)上增加了一個新的維度:
a = a.unsqueeze(0)
print(a.shape)
輸出如下:
torch.Size([1, 3, 3])
我們可以看到,張量a的第一維度大小由原來的3變為了1,並在第一維度上增加了一個新的維度。同樣地,我們可以在其他維度上使用unsqueeze函數增加維度。
2. 使用view函數增加維度
使用view函數可以調整張量的維度。對於一個張量,我們可以通過reshape或者view函數調整其形狀,不同之處在於當張量不連續時,reshape會出現錯誤,而view函數不會。下面的代碼增加了一個新的維度,並將其放置在了張量的最後一個維度上:
b = a.view(-1, 3, 1)
print(b.shape)
輸出如下:
torch.Size([3, 3, 1])
在上述代碼中,我們使用view函數將張量a調整成了一個三維的張量,新的張量b的第三個維度大小為1,該維度位於最後一個維度上,並且通過設置第一個參數為-1,使得view函數能夠自動計算第一個維度的大小。
3. 使用unsqueeze和view函數結合增加維度
使用unsqueeze和view函數可以結合增加維度。例如,下面的代碼在a的第二個維度上增加了一個新的維度,並將其放置在了最後一個維度上:
c = a.unsqueeze(2).view(3,3,1)
print(c.shape)
輸出如下:
torch.Size([3, 3, 1])
在上述代碼中,我們先使用unsqueeze函數在第二個維度上插入了一個新的維度,然後使用了view函數將張量a調整成了一個三維的張量,新的張量c的第三個維度大小為1,該維度位於最後一個維度上。
三、小結
在PyTorch中,我們可以使用unsqueeze和view函數來增加一個張量的維度。前者是在張量中插入新的維度,而後者是通過調整張量的形狀來增加維度。可以根據實際需求使用不同的函數來增加維度。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/183344.html