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

  • 転置
    • これ第二引数以降意味あるのかな??
  • 転置行列 と同じ概念
    • \( \begin{eqnarray} (2, 3, 5, 8)^T = \left[ \begin{array}{ccc} 2 \\ 3 \\ 5 \\ 8 \\ \end{array} \right] \end{eqnarray} \) と書けるし、逆に \( \begin{eqnarray} \left[ \begin{array}{ccc} 2 \\ 3 \\ 5 \\ 8 \\ \end{array}\right]^T = (2, 3, 5, 8) \end{eqnarray} \) となるらしい
>>> 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]])