pytorch中的contiguous()
阿新 • • 發佈:2018-12-04
呼叫view之前最好先contiguous,也就是x.contiguous().view()
因為view需要tensor的記憶體是整塊的
contiguous:中文意思連續的。view只能用在contiguous的variable上。如果在view之前用了transpose, permute等,需要用contiguous()來返回一個contiguous copy。
一種可能的解釋是:
有些tensor並不是佔用一整塊記憶體,而是由不同的資料塊組成,而tensor的view()操作依賴於記憶體是整塊的,這時只需要執行contiguous()這個函式,把tensor變成在記憶體中連續分佈的形式。
判斷是否contiguous用torch.Tensor.is_contiguous()函式。
import torch
x = torch.ones(10, 10)
x.is_contiguous() # True
x.transpose(0, 1).is_contiguous() # False
x.transpose(0, 1).contiguous().is_contiguous() # True
另外,在pytorch的最新版本0.4版本中,增加了torch.reshape(), 這與 numpy.reshape 的功能類似。它大致相當於 tensor.contiguous().view()