Image

PyTorchのテンソルの基本的な使い方を学習しよう!PyTorchでディープラーニング!

PyTorchのテンソルの基本的な使い方を解説しています。PythonのPyTorchにはテンソルというデータフレームがあり、それを使用して機械学習のためにデータを加工していきます。今回はそのテンソルの基本的な使い方についてまとめてみました。

PyTorchのテンソルを使えるようになろう

今回はPyTorchのテンソルの基本的な使い方についてまとめます

テンソルは高度ではないものの、数学的な要素が入ってきます。

数学が苦手な人でも比較的簡単にわかるような数字などを使用しているのでぜひ読んでみて下さい。

目次   

01. PyTorchのテンソルとは

02. PyTorchのテンソルの変換

03. PyTorchのテンソルの使い方

04. まとめ


01. PyTorchのテンソルとは


まずPyTorchのテンソル(Tensor)とは、任意の多次元配列です。

テンソルには階(ランク)があり、0階をスカラーといい、1階のテンソルはベクトルといいます。

1階のベクトルはスカラーを一列に並べた一次元配列に相当します。

2階のテンソルはスカラーを縦横に並べた行列であり、二次元配列になります。

3階のテンソルは2次元配列の行列をいくつも並べた三次元配列となります。

行列をイメージすればわかりやすいでしょう。

PyTorchではそのテンソルを扱うためにtorch.Tensor関数があります。

この関数によってテンソルを生成します。

テンソルは機械学習のデータの基になります。

PyTorchではインストールを終えてもPyTorchの関数をすぐに使うことができる訳ではありません。

プログラムを実行したり、作成したりする前に、パッケージtorchをインポートする必要があります。

これはPythonを終了するたびに一度リセットされるので、Pythonを起動するたびにインポートを忘れないようにしましょう。



# PyTorchをインポート
python
import torch


コマンドで行なってテンソル生成の準備をしましょう。

これから基本的なテンソルの生成方法について触れていきます。

ちなみにPyTorchの環境構築ができていない人はPyTorchの環境構築を済ませて下さい。

PyTorchの環境構築をしよう



z = torch.tensor([1,2,3])
print(z)
>>> tensor([1,2,3])


このPythonコードを実行すると結果が表示されると思います。

最も基本的なPyTorchでのテンソルの生成です。



z = torch.tensor([[1,2],[3,4]])
print(z)
>>> tensor([[1,2],
[3,4]] )


テンソルではリストの中にリストを生成することができます。

行列が表現できることがイメージできると思います。



z = torch.tensor([[1,2],[3,4]])
print(z.size())
>>> torch.Size([2,2])


sizeメソッドを使用してサイズを調べることも可能です

サイズは要素の数を表示します。



z1 = torch.tensor([1,2,3])
z2 = torch.tensor([1,2,3], dtype=tourch.float64)
z3 = torch.DoubleTensor([1,2,3])
print(z1.dtype)
print(z2.dtype)
print(z3.dtype)
>>> torch.int64
>>> torch.float64
>>> torch.float64


このようにしてPyTorchのテンソルではデータの型を指定することもできます

例では64ビット浮動小数点型のテンソルを作成しています。

次に扱うことのできる関数について触れておきます。



z = torch.arange(0,10)
print(z)
tensor([0,1,2,3,4,5,6,7,8,9])
z = torch.linspace(0, 10, 5) #3つ目の引数の5は要素の数
print(z)
tensor([0.0000, 2.5000, 5.0000, 7.5000, 10.0000])
z = tourch.rand(1,2) #0から1の乱数を生成させる。引数は行列の形をイメージ
print(z)
tensor([[0.1093,0.0498]])
z = torch.zeros(1,2)
print(z)
tensor([[0., 0.]])
z = torch.ones(1,2)
print(z)
tensor([[1., 1.]])


コードを見れば行なっていることはわかると思います。

一つ触れるとするなら行列の形をイメージできるかどうかだと思います。

(1,2)なら1行×2列の行列を意味しています。

(2,3)なら2行×3列の行列を意味します。



z = torch.tensor([1,2,3]).to('cuda')
print(z.device)
>>> device(type='cuda', index=0)


生成したテンソルをto()メソッドによってGPUに送ることができます

ちなみにGPUとは計算を行う空間をイメージしておけば大丈夫です。

GPUでは無数の行列演算を行うことができます


02. PyTorchのテンソルの変換


この章ではPyTorchにおける前処理について触れます。

膨大なデータを扱う上でデータの前処理は必須になってきます。

PyTorchではその前処理を行う一般的なツールが使用できません。

そこでNumPyのndarrayというツールを経由してデータの前処理をし、処理したデータをPyTorchで使うためにndarrayからTensorに変換しよう。

というものです。



import numpy as np


まずはNumPyをインポートしましょう。



array = np.array([[1,2,3],[4,5,6]])
print(array)
>>> array([[1,2,3],[4,5,6]])


NumPyを使用してndarrayを生成します。



tensor = torch.from_numpy(array)
print(tensor)
>>> tensor([[1,2,3],[4,5,6]])


from_numpyを使用することでndarrayからPyTorchのテンソルに変換します



tensor2array = tensor.numpy()
print(tensor2array)
array([[1,2,3],[4,5,6]])


numpyメソッドによってテンソルからndarrayに変換することができます


03. PyTorchのテンソルの使い方


テンソルの要素へのアクセスや要素の部分的な抽出方法を紹介します。



z = torch.tensor([[1,2,3],[3,4,5]])
print(z[1,2])
>>> tensor(6)


z[1,2]は1つ目の行列の2つ目の要素を指しています。

ちなみに0から数えます。

取り出した要素はコピーなので要素がどこかに移動している訳ではありません。

これをスライスと言います



z = torch.tensor([[1,2,3],[4,5,6]])
print(z{[1,:])
tensor([4,5,6])


:はそれ以下の要素を全て選択します



z = torch.tensor([[1,2,3],[4,5,6]])
z_reshape = z.view(3,2)
print(z)
print(z_reshape)
tensor([[1,2,3]
[4,5,6]])
tensor([[1,2]
[3,4]
[5,6]])


z.view(3,2)の3,2は3行2列の行列に変換することを意味しています。

ここまでがPyTorchにおける基本的なテンソルの操作です。


04. まとめ


お疲れ様でした。

ここまで読んでいただきありがとうございました。

長くなりましたがテンソルの操作までの基本はこれで押さえることができています。

次はテンソルの四則演算について触れていきます。