深層学習に使うテンソルの操作について解説します。
RNNやLSTMでテンソルを使う場合、3次元のデータにします。0次元目がサンプル、1次元目が時刻、3次元目が特徴量を表します。
通常の深層学習では、2次元データを使いますが、時系列データを使うため、一つのサンプルに複数の時刻のデータが必要になるということです。
経済統計の使い方では、統計データの入手法から分析法まで解説しています。
テンソルとは
テンソルは、Numpyのarray、Pandasのデータフレームなどと並んで、Pytorchで使われるデータ形式です。データフレームは2次元の表形式ですが、arrayとpytochは3次元以上の次元にも対応しています。
また、arrayは数値の集まりですが、pytorchはGPUの使用や自動微分などの機能も備わっています。
データフレームには変数名がつけられますが、テンソルには変数名はつけられません。
| データ構造 | 説明 |
| array | 多次元 |
| データフレーム | 2次元 |
| テンソル | 多次元 |
テンソルの作成
テンソルを作成する方法はnumpyのarrayと同じです。
3次元テンソルの場合
import torch
# 1次元テンソル(ベクトル)
t1 = torch.tensor([1.0, 2.0, 3.0])
# 2次元テンソル(行列)
t2 = torch.tensor([[1, 2], [3, 4]])
#3次元テンソル
t3 = torch.tensor([
[[1, 2, 3],
[4, 5, 6]],
[[7, 8, 9],
[10, 11, 12]]
])
print(t1)
print(t2)
print(t3)出力
tensor([1., 2., 3.])
tensor([[1, 2],
[3, 4]])
tensor([[[ 1, 2, 3],
[ 4, 5, 6]],
[[ 7, 8, 9],
[10, 11, 12]]])データフレームでは、行がサンプルの数、列が変数を表します。
RNNやLSTMでは、3次元テンソルが基本で、[サンプル数, 時間ステップ数, 特徴量数]を表します。上の例では、サンプル数が2,時間ステップも2,特徴量が3つあることになります。1ステップ目の特徴量は1,2,3と4,5,6の2期間、特徴量はそれぞれ3つということになります。
tensor([[[ 1, 2, 3], #サンプル1,時刻1の特徴量
[ 4, 5, 6]], #サンプル1、時刻2の特徴量
[[ 7, 8, 9], #サンプル2、時刻1の特徴量
[10, 11, 12]]]) #サンプル2、時刻2の特徴量多次元要素の取り出し方
テンソルをt3とすると、t3[1,2,3]などとあらわすことで、0次元目の2番目のデータ、1次元目の3番目のデータ、2次元目の4番目のデータを指定することができます。
また、t3[1]は、1次元目以降は全データを表すという意味で、t3[1,:,:]と同じ意味を表します。
データの変形
データの次元を変えるには、viewメソッドを使います。
2次元データの場合、view(-1,1)とすると、1列のデータが取り出せます。-1は自動的に計算されます。
import torch
# 2次元テンソル(行列)
t2 = torch.tensor([[1, 2,3], [4,5,6]])
t1=t2.view(-1,1)
print(t1)出力
tensor([[1],
[2],
[3],
[4],
[5],
[6]])
