FreeStyleWiki

テンソルの操作

[機械学習,数学,Python]

テンソルの操作

  Tensorの形状

  cat

  • dimで指定した部分だけ異なっていればcatで結合できる
    • 下の例だと、奥行き3m, 幅4mの部屋がそれぞれ2階,2階,5階あるのでくっつけて9階建てにしたみたいな
import torch
input1 = torch.randn(2, 3, 4)
input2 = torch.randn(2, 3, 4)
input3 = torch.randn(5, 3, 4)
input_list = [input1, input2, input3]

output1 = torch.cat(input_list, dim=0)
print(output1.size()) # torch.Size([9, 3, 4])

  transpose

  • 転置
    • これ第二引数以降意味あるのかな??
  • 転置行列 と同じ概念
    • %5Cbegin%7Beqnarray%7D+%282%2C+3%2C+5%2C+8%29%5ET+%3D+%5Cleft%5B+%5Cbegin%7Barray%7D%7Bccc%7D+2+%5C%5C+3+%5C%5C+5+%5C%5C+8+%5C%5C+%5Cend%7Barray%7D+%5Cright%5D+%5Cend%7Beqnarray%7D+ と書けるし、逆に %5Cbegin%7Beqnarray%7D+%5Cleft%5B+%5Cbegin%7Barray%7D%7Bccc%7D+2+%5C%5C+3+%5C%5C+5+%5C%5C+8+%5C%5C+%5Cend%7Barray%7D%5Cright%5D%5ET+%3D+%282%2C+3%2C+5%2C+8%29+%5Cend%7Beqnarray%7D+ となるらしい
>>> import torch
>>> x = torch.randn(4, 3)

>>> x
tensor([[ 0.2062, -1.0431, -0.5528],
        [ 1.8057,  0.7966, -0.6941],
        [-1.3884, -2.0070, -0.2932],
        [-0.6781, -0.0142,  0.8535]])

>>> torch.t(x)
tensor([[ 0.2062,  1.8057, -1.3884, -0.6781],
        [-1.0431,  0.7966, -2.0070, -0.0142],
        [-0.5528, -0.6941, -0.2932,  0.8535]])

  view

1つ目の引数に-1を入れることで、2つ目の引数で指定した値にサイズ数を自動的に調整してくれます。

Tensorの要素数が指定したサイズ数に合わない(割り切れない)場合、エラーになります。

もちろん、サイズ数を指定することもできます。

>>> x
tensor([[ 0.2062, -1.0431, -0.5528],
        [ 1.8057,  0.7966, -0.6941],
        [-1.3884, -2.0070, -0.2932],
        [-0.6781, -0.0142,  0.8535]])

>>> x.view(-1, 2) # サイズ数を自動的に調整してくれる
tensor([[ 0.2062, -1.0431],
        [-0.5528,  1.8057],
        [ 0.7966, -0.6941],
        [-1.3884, -2.0070],
        [-0.2932, -0.6781],
        [-0.0142,  0.8535]])

>>> x.view(-1, 6) # サイズ数を自動的に調整してくれる
tensor([[ 0.2062, -1.0431, -0.5528,  1.8057,  0.7966, -0.6941],
        [-1.3884, -2.0070, -0.2932, -0.6781, -0.0142,  0.8535]])

↑上記、縦横の要素数は変わっても、全体の要素数は変わっていないことに注目
↓全体の要素数が変わるような指定をするとエラーになる

>>> x.view(-1, 5) # Tensorの要素数が指定したサイズ数に合わない
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: invalid argument 2: size '[-1 x 5]' is invalid for input with 12 elements at /Users/soumith/code/builder/wheel/pytorch-src/aten/src/TH/THStorage.cpp:80

>>> x.view(3, 4) # サイズ数を指定
tensor([[ 0.2062, -1.0431, -0.5528,  1.8057],
        [ 0.7966, -0.6941, -1.3884, -2.0070],
        [-0.2932, -0.6781, -0.0142,  0.8535]])