Pytorch入門——Tensor

11321 ワード

以前のブログでPytorchについて紹介し、インストールしました.次にPytorchを正式に勉強します.本章のブログでは主にtorch Tensor、torch Tensorとnumpy arrayの変換と演算操作を紹介します.
1.Tensor
Tensorはnumpyのndarraysに類似しており,またGPU上でTensorを用いて加速計算を行うこともできる.pytorchパッケージのインポート
import torch

次に、5*3のマトリクスを作成し、出力する方法について説明します.
x = torch.Tensor(5, 3)
print(x)
#  :
   0.0000    0.0000    0.0000
   0.0000    0.4677    0.0000
   0.4692    0.0000    0.4662
   0.0000    0.4693    0.0000
  12.7686  189.2708    0.0000
[torch.FloatTensor of size 5x3]

ランダム初期化マトリクスの作成
x = torch.rand(5, 3)
print(x)
#  :
 0.0608  0.8530  0.3833
 0.3624  0.2066  0.9663
 0.6356  0.3567  0.4907
 0.1922  0.8057  0.5244
 0.0902  0.3608  0.9948
[torch.FloatTensor of size 5x3]

取得マトリクスのサイズ
print(x.size())
#  :
(5L, 3L)
#torch.Size         ,          

2.pytorch Tensorとnumpy arrayの変換
2.1 Tensorをnumpy配列に変換する
a = torch.ones(5)
print (a)
#  :
 1
 1
 1
 1
 1
[torch.FloatTensor of size 5]
b = a.numpy()
print (b)
#  :
[ 1.  1.  1.  1.  1.]

aに1を加え、numpy配列bの値の変化を見てみましょう.
a.add_(1)
#  :
 2
 2
 2
 2
 2

print(a)
#  :
 2
 2
 2
 2
 2
[torch.FloatTensor of size 5]

print(b)
#  :
[ 2.  2.  2.  2.  2.]

2.2 numpy配列をTorchテンソルに変換する
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
#  :
array([ 2.,  2.,  2.,  2.,  2.])
print (a)
#  :
[ 2.  2.  2.  2.  2.]
print (b)
#  :
 2
 2
 2
 2
 2
[torch.DoubleTensor of size 5]

pytorch Tensorとnumpy arrayの変換はtensorに対してもarrayに対しても演算操作を行い,オン時に両者の値が変化する.
3.演算操作
Pytorchは演算操作のAPIを提供し、必要な演算操作は具体的に公式ドキュメントの説明を参照することができる.ここでは加算演算を例に、Pytorchのいくつかの演算操作の文法を示す:文法1:op 1+op 1
x = torch.rand(5, 3)
#  :
 0.0608  0.8530  0.3833
 0.3624  0.2066  0.9663
 0.6356  0.3567  0.4907
 0.1922  0.8057  0.5244
 0.0902  0.3608  0.9948
[torch.FloatTensor of size 5x3]

y = torch.rand(5, 3)
#  :
 0.8414  0.9531  0.9665
 0.5594  0.9018  0.3758
 0.6742  0.8654  0.9356
 0.6685  0.8721  0.7872
 0.7185  0.2411  0.8492
[torch.FloatTensor of size 5x3]

print (x+y)
#  :
 0.9021  1.8061  1.3498
 0.9218  1.1084  1.3421
 1.3099  1.2221  1.4263
 0.8608  1.6778  1.3116
 0.8087  0.6019  1.8440
[torch.FloatTensor of size 5x3]

構文2:torch.operation(op 1,op 2,...)
print(torch.add(x, y))
#  :
 0.9021  1.8061  1.3498
 0.9218  1.1084  1.3421
 1.3099  1.2221  1.4263
 0.8608  1.6778  1.3116
 0.8087  0.6019  1.8440
[torch.FloatTensor of size 5x3]

構文3:op 1.operaition_(op2)
y.add_(x)
#  :
 0.9021  1.8061  1.3498
 0.9218  1.1084  1.3421
 1.3099  1.2221  1.4263
 0.8608  1.6778  1.3116
 0.8087  0.6019  1.8440
[torch.FloatTensor of size 5x3]

補足:この.cuda関数を使用してtensorをGPUに移動して計算できます.
# let us run this cell only if CUDA is available
if torch.cuda.is_available():
    x = x.cuda()
    y = y.cuda()
    x + y