【Pytorch】:x.view() view()方法的使用
阿新 • • 發佈:2021-07-20
在pytorch當中,我們經常會用到x.view()方法來進行資料維度的變化,但是這個方法具體該如何使用呢?
下面我來記錄一下筆記:
一.按照傳入數字使資料維度進行轉換
首先,我們可以傳入我們想要的維度,然後按照傳入的數字對資料進行維度變化。比如,x.view()當中可以放入列表或者是單個數字,比如我們有程式碼先生成一個3*2維度的tensor矩陣,那麼我們的程式碼可以寫成x.view(3,2) 也可以在view方法當中放入列表[3,2],最終為x.view([3,2])如下所示:
import torch b=torch.randn(3,2)#也可以寫成b=torch.randn([3,2]),效果是一樣的print(b)
輸出如下:
tensor([[-0.0035, -0.7276], [ 2.5166, -0.0649], [ 2.3062, -1.1144]])
那麼我們想要將其維度進行隨意變化的話,可以使用view()方法,比如我想將其維度變化成:1*6,則使用方法view(1*6)即可。
程式碼如下:
import torch b=torch.randn(3,2) print(b) print(b.view(1,6)) print(b.view(6,1))
輸出如下:
tensor([[-0.0035, -0.7276], [ 2.5166, -0.0649], [2.3062, -1.1144]]) tensor([[-0.0035, -0.7276, 2.5166, -0.0649, 2.3062, -1.1144]]) tensor([[-0.0035], [-0.7276], [ 2.5166], [-0.0649], [ 2.3062], [-1.1144]])
這樣我們就可以看到tensor的維度確實根據我們所寫進行變化了。
二.傳入數字-1,自動對維度進行變換
這裡討論第二種方法,也就是在某一個維度,我們可以傳入數字-1,自動對維度進行計算並變化:
假設我們有一個數據維度為【3,5,2】的tensor,我們想要將其轉化為其中兩個維度分別為【3,1】,【5,2】,而剩下的第三個維度自動進行計算,那麼我們可以使用-1來代替【3,1,10】當中的10,以及用-1來代替轉化後【5,2,3】維度當中的數字3.我們可以發現3*1*10=3*5*2=5*2*3,因此變化後的維度乘積是相等的。
程式碼如下:
import torch a=torch.randn(3,5,2) print(a) print(a.view(3,1,-1).size()) print(a.view([3,1,-1]).size()) #不管加不加上列表符號,最後reshape的結果是一樣的 print(a.view([5,2,-1]).size())
輸出如下:
tensor([[[ 1.6498, -0.4354], [-1.0042, -0.1582], [ 1.2794, -0.1203], [ 0.9198, 2.8475], [ 0.0065, 1.5481]], [[ 0.7220, -1.1230], [ 0.2665, -0.6645], [-0.6159, -0.3833], [-1.4767, 0.8378], [-0.3257, 0.2394]], [[ 0.3784, 0.4233], [-0.5807, 1.2695], [ 1.7632, 0.7828], [ 1.0076, 0.6205], [ 0.9948, -1.2256]]]) torch.Size([3, 1, 10]) torch.Size([3, 1, 10]) torch.Size([5, 2, 3])
輸出的維度確實為兩個【3,1,10】,以及一個【5,2,3】,說明維度進行了自動的變化。
remark:我們能不能使用view()方法將三維的資料,變成二維的資料呢?
答案顯然也是可以的,假設我們依然使用剛才的程式碼,但是隻是將維度變化成二維,程式碼如下所示:
import torch a=torch.randn(3,5,2) print(a.size()) print(a.view([3,-1]).size())
輸出為:
torch.Size([3, 5, 2])
torch.Size([3, 10])
因此,我們使用-1數字自動計算出了其餘的一個維度,同時將三維的資料壓縮為了2維的資料,view方法可謂是非常方便了!