2017-03-17 75 views
1

使用unsqueeze()Torch中的view()和unsqueeze()有什麼區別?

使用 view()
input = torch.Tensor(2, 4, 3) # input: 2 x 4 x 3 
print(input.unsqueeze(0).size()) # prints - torch.size([1, 2, 4, 3]) 

input = torch.Tensor(2, 4, 3) # input: 2 x 4 x 3 
print(input.view(1, -1, -1, -1).size()) # prints - torch.size([1, 2, 4, 3]) 

據文檔,unsqueeze()插入單暗淡在給定的參數和view()位置創建具有相關聯的存儲的不同的尺寸的圖tensor

view()對我來說很清楚,但我無法區分它與unsqueeze()。此外,我不明白何時使用view()以及何時使用unsqueeze()

任何幫助與良好的解釋將不勝感激!

回答

2

view()只能取單個「-1」參數。

所以,如果你想添加一個singleton維度,你需要提供所有的維度作爲參數。例如,如果A是一個2x3x4張量,要添加一個單獨維度,您需要執行A:view(2,1,3,4)。

但是,有時候,使用操作時,輸入的維度是未知的。因此,我們不知道A是2x3x4,但我們仍然希望插入一個單獨的維度。當使用最小維度通常是未知的張量minibatches時,會發生這種情況。在這些情況下,nn.Unsqueeze非常有用,可以讓我們在編寫代碼時插入維度,而不必明確知道其他維度。