PyTorch中view的用法


理解

我的理解就是將原來的tensor在進行維度的更改(根據參數的輸入進行更改)后再進行輸出,其實就是更換了tensor的一種查看方式

例子

a=torch.Tensor([[[1,2,3],[4,5,6]]])
b=torch.Tensor([1,2,3,4,5,6])

print(a.view(1,6))
print(b.view(1,6))

輸出結果為

tensor([[1., 2., 3., 4., 5., 6.]]) 

同樣的:

a=torch.Tensor([[[1,2,3],[4,5,6]]])
print(a.view(3,2))

輸出結果為:

tensor([[1., 2.],
        [3., 4.],
        [5., 6.]])

注意

但是要注意原來的tensor與新的tensor是共享內存的,也就是說對其中的一個tensor進行更改的話,另外一個tensor也會自動進行相應的修改。

那么如果想生成不共享內存的tensor要怎么做呢?

應該使用clone()函數克隆和再進行view(),而且使⽤ clone 還有⼀個好處是會被記錄在計算圖中,即梯度回傳到副本時也會傳到源 Tensor 。

x_cp = x.clone().view(15)
x -= 1
print(x)
print(x_cp)

輸出的結果:

tensor([[ 0.6035, 0.8110, -0.0451],
 [ 0.8797, 1.0482, -0.0445],
 [-0.7229, 2.8663, -0.5655],
 [ 0.1604, -0.0254, 1.0739],
 [ 2.2628, -0.9175, -0.2251]])
tensor([1.6035, 1.8110, 0.9549, 1.8797, 2.0482, 0.9555, 0.2771,
3.8663, 0.4345,
 1.1604, 0.9746, 2.0739, 3.2628, 0.0825, 0.7749])

 

注意:有的是這樣使用的

x.view(4, -1)

其中的-1是表示你不確定這里的維數是多少,但是你確定前面的行數是3,讓系統自動調整


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM