1. ホーム
  2. python

[解決済み] Pytorch リシェイプテンソル次元

2022-03-02 23:48:14

質問

例えば、次元(5)の1次元ベクトルを持っています。これを2次元の行列(1,5)に整形したいのですが、どうすればよいでしょうか?

以下はnumpyで行う方法です。

>>> import numpy as np
>>> a = np.array([1,2,3,4,5])
>>> a.shape
(5,)
>>> a = np.reshape(a, (1,5))
>>> a.shape
(1, 5)
>>> a
array([[1, 2, 3, 4, 5]])
>>> 

しかし、Pytorch Tensor (とVariable)でそれを行うにはどうしたらよいのでしょう。バックプロパゲーションの情報が失われるので、numpyに戻して、またTorch変数に切り替えるのは嫌です。

私がPytorchで持っているものは次のとおりです。

>>> import torch
>>> from torch.autograd import Variable
>>> a = torch.Tensor([1,2,3,4,5])
>>> a

 1
 2
 3
 4
 5
[torch.FloatTensor of size 5]

>>> a.size()
(5L,)
>>> a_var = variable(a)
>>> a_var = Variable(a)
>>> a_var.size()
(5L,)
.....do some calculation in forward function
>>> a_var.size()
(5L,)

今度は、サイズを(1, 5)にしたい。 どのようにすれば、情報を失うことなく、Variableのpytorchテンソルの次元を変更することができるだろうか?(バックワード前に別のモデルにフィードするため)

どのように解決するのですか?

使用方法 torch.unsqueeze(input, dim, out=None)

>>> import torch
>>> a = torch.Tensor([1,2,3,4,5])
>>> a

 1
 2
 3
 4
 5
[torch.FloatTensor of size 5]

>>> a = a.unsqueeze(0)
>>> a

 1  2  3  4  5
[torch.FloatTensor of size 1x5]