pytorch 程式碼筆記
阿新 • • 發佈:2018-12-02
轉到pytorch之後,還沒有系統的學習,然而在看一些原始碼的時候,還是遇到了不少由於版本以及API變動所帶來的一些問題,然鵝網上關於這件事的相關資料較少,暫時記錄一下,以後有空了再探究一下底層實現細節問題。
torch.cat()
- input param:[ tuple, dim=]
- return : tensor
- problem describe:
本來正常使用應該不會有什麼問題,但是我在閱讀原始碼的時候,遇到了一題提示錯誤:
RuntimeError: zero-dimensional tensor (at position 0) cannot be concatenated
導致這個問題的code部分如下:
x = torch.tensor(0.5)
y = torch.tensor(0.4)
m = torch.cat((x, y))
>> "RuntimeError: zero-dimensional tensor (at position 0)"
# this is the right code:
x = torch.tensor([0.5])
y = torch.tensor([0.4])
m = torch.cat((x, y))
>> m tensor([0.5, 0,4])
也就是說這個問題的根本在於,torch.cat() 函式傳入的tuple裡面的tensor維度不可以為0,而我們直接建立一個非list的tensor的時候,就有了zero-dimensional tensor, 這在pytorch0.3 版本沒有什麼問題,但pytorch0.4版本中,加入了zero-dimensional tensor 的概念,做出了區分。
ps:之所以會這樣,是因為我想要做concatenate操作的是一個tensor的浮點型資料,loss.data, 而loss.data 是一個tensor()型別, 跟tensor([])型別是完全不一樣的!
int() float() str()
遇到的另一個問題就是如何把一個tensor 型別的資料,轉為Python所能操作的對應的型別,需要注意的一點是,在pytorch0.4版本中,int和float對應的tensor都有對應的直接型別轉換,但是沒辦法直接變成一個string型別!!!
直接來看幾個例子吧:
>> x = torch.tensor(0.5) torch.tensor(0.5) torch.size([]) >> float(x) 0.5 >> str(x) 'tensor(0.5000)' >> str(float(x)) '0.5'
劃重點啦,torch.tensor 是沒辦法直接轉到str型別的!!!