web-dev-qa-db-ja.com

PyTorch:Tensorの形状をintのリストとして取得する方法

Numpyでは、V.shapeはVの次元の整数のタプルを提供します。

テンソルフローでは、V.get_shape().as_list()はVの次元の整数のリストを提供します。

Pytorchでは、V.size()はサイズオブジェクトを提供しますが、それをintに変換するにはどうすればよいですか?

10
patapouf_ai

PyTorch v1.0以降の場合:

>>> import torch
>>> var = torch.tensor([[1,0], [0,1]])

# Using .size function, returns a torch.Size object.
>>> var.size()
torch.Size([2, 2])
>>> type(var.size())
<class 'torch.Size'>

# Similarly, using .shape
>>> var.shape
torch.Size([2, 2])
>>> type(var.shape)
<class 'torch.Size'>

任意のtorch.SizeオブジェクトをネイティブPythonリストにキャストできます。

>>> list(var.size())
[2, 2]
>>> type(list(var.size()))
<class 'list'>

PyTorch v0.3および0.4の場合:

単にlist(var.size())、例:

>>> import torch
>>> from torch.autograd import Variable
>>> from torch import IntTensor
>>> var = Variable(IntTensor([[1,0],[0,1]]))

>>> var
Variable containing:
 1  0
 0  1
[torch.IntTensor of size 2x2]

>>> var.size()
torch.Size([2, 2])

>>> list(var.size())
[2, 2]
19
alvas

あなたがNumPyish構文のファンなら、tensor.shapeがあります。

In [3]: ar = torch.Rand(3, 3)

In [4]: ar.shape
Out[4]: torch.Size([3, 3])

# method-1
In [7]: list(ar.shape)
Out[7]: [3, 3]

# method-2
In [8]: [*ar.shape]
Out[8]: [3, 3]

# method-3
In [9]: [*ar.size()]
Out[9]: [3, 3]

P.S。tensor.shapetensor.size()のエイリアスですが、tensor.shapeは問題のテンソルの属性ですが、tensor.size()は関数です。

5
kmario23