Python Error fix-ERROR:TypeError: _mean() got an unexpected keyword argument ‘dim‘

TypeError: _mean() got an unexpected keyword argument 'dim’報錯解決【numpy中用axis和pytorch中用dim,因爲一個是numpy變量一個是tensor變量】

報錯如下:
TypeError: _mean() got an unexpected keyword argument 'dim'
在這裏插入圖片描述
報錯原因: numpy中用axis和pytorch中用dim,因爲一個是numpy變量一個是tensor變量

發生錯誤的過程如下:
剛開始,我的代碼是這樣的:

此處省略若干行
input_var = torch.autograd.Variable(data.view(-1, length, data.size(2), data.size(3)),volatile=True)
rst = net(input_var).data
return i, rst.reshape((num_crop, int(args.test_segments/args.models_segments), num_class)).mean(axis=0).reshape((int(args.test_segments/args.models_segments), 1, num_class)), label[0]

這時候運行是沒有問題的,因爲用torch.autograd.Variable接口封裝成Variable類型數據並作爲模型的輸入。net(input_var)得到的結果是Variable,這時候rst是tensor變量,可以用dim參數。

但是因爲我要讀取Tensor內容,需讀取data變量,所以代碼改成了:

此處省略若干行
input_var = torch.autograd.Variable(data.view(-1, length, data.size(2), data.size(3)),volatile=True)
rst = net(input_var).data
return i, rst.reshape((num_crop, int(args.test_segments/args.models_segments), num_class)).mean(axis=0).reshape((int(args.test_segments/args.models_segments), 1, num_class)), label[0]

其中,cpu()表示存儲到cpu,numpy()表示Tensor轉爲numpy array,copy()表示拷貝
然後就
在這裏插入圖片描述
轉成了numpy變量之後,就得用axis

解決辦法: dim改成axis

附:numpy中的axis和Pytorch中的dim參數

Numpy中有許多函數都帶有一個參數:axis(對應於pytorch中的dim參數),用來指定函數計算是在哪個維度上進行的。這些函數包括:mean() 、sum()等。 這裏說一下axis(dim)的用法:

簡單的記憶方式:
1、二維:
axis=0表示分別對每一列做運算;
axis=1表示分別對每一行做運算。
2、高維:
假設輸入的形狀是(m, n, k):
-如果指定axis(dim)=0, 輸出的size就是(1, n, k)或者(n, k)
-如果指定axis(dim)=1, 輸出的size就是(m, 1, k)或者(m, k)
-如果指定axis(dim)=2, 輸出的size就是(m, n, 1)或者(m, n).
size中是否有“1”,取決於參數keepdims(或keepdim)。keepdims=True會保留維度1,通常默認是等於False。

注意:以上只是經驗總結,對於絕大部分函數適用,少數函數如cumsum(累加)不符合。

此外,對於二維數組(矩陣),可以用一句話記住:axis=0表示分別對每一列做運算;如果axis=1表示分別對每一行做運算。這個tip對幾乎所有場景適用(包括cumsum函數等)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章