一、什麼是torch.unsqueeze函數?
在深度學習中,我們經常需要改變張量(tensor)的形狀以滿足不同的需求,例如,改變張量的維度、改變張量的順序等等。而函數torch.unsqueeze就是用來改變張量維度的常用函數之一,它可以在張量的某個維度上增加一個維度。具體來說,unsqueeze函數會在該維度前插入一個為1的維度。以下是unsqueeze函數的語法:
torch.unsqueeze(input, dim)
其中input表示輸入的張量(必須是torch.tensor類型),而dim則表示要在哪個維度上增加一個維度。在這裡要特別注意,dim的取值範圍必須在[-input.ndim – 1, input.ndim]之間(其中input.ndim表示輸入張量的維度)。
二、torch.unsqueeze函數的使用方法
1. 在二維張量中增加一個維度
我們先從一個簡單的例子開始,給定一個二維張量input,我們要在其第二個維度上增加一個維度。具體操作如下:
import torch
input = torch.tensor([[1, 2, 3], [4, 5, 6]])
output = torch.unsqueeze(input, dim=1)
print(output.shape)
運行結果為:
torch.Size([2, 1, 3])
可以看到,通過調用unsqueeze函數,在第二個維度上插入了一個維度,將原來的二維張量變成了三維。
2. 在高維張量中增加一個維度
除了在二維張量中增加一個維度之外,unsqueeze函數同樣適用於高維張量。例如,給定一個三維張量input,我們要在其第一個維度上增加一個維度:
import torch
input = torch.tensor([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
output = torch.unsqueeze(input, dim=0)
print(output.shape)
運行結果為:
torch.Size([1, 2, 2, 3])
可以看到,通過在第一個維度上插入一個維度,將原來的三維張量變成了四維。
3. 在張量中間的維度上增加一個維度
除了在張量的最前面或最後面增加維度之外,在中間的維度上增加維度同樣也是非常有用的。例如,給定一個四維張量input,我們要在其第三個維度(從零開始計數)上增加一個維度:
import torch
input = torch.tensor([[[[1, 2], [3, 4]], [[5, 6], [7, 8]]], [[[9, 10], [11, 12]], [[13, 14], [15, 16]]]])
output = torch.unsqueeze(input, dim=2)
print(output.shape)
運行結果為:
torch.Size([2, 2, 1, 2, 2])
可以看到,通過在第三個維度上插入一個維度,將原來的四維張量變成了五維。
三、小結
本文主要介紹了深度學習框架torch.unsqueeze函數的使用方法。我們可以通過這個函數來增加張量的維度,從而滿足不同的需求。在使用該函數時,需要注意dim參數的設置,以避免出現維度設置錯誤的問題。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/271946.html