1. 環境は、Window 10 Home (64bit) 上で行った。
2. Anaconda3 (64bit) – Spyder上で、動作確認を行った。
3. python の バージョンは、python 3.6.5 である。
4. pytorch の バージョンは、pytorch 0.4.1 である。
5. GPU は, NVIDIA社 の GeForce GTX 1050 である。
今回確認した内容は、現場で使える! PyTorch開発入門 深層学習モデルの作成とアプリケーションへの実装 (AI & TECHNOLOGY) の 2.3.2 PyTorchで線形回帰モデル(P.032 – P.034) である。
線形回帰について, 少し理解を深めるため, 書籍例から, 若干異なるパターンについて, 線形回帰モデルのパラメータを求める動作確認を行った.
※プログラムの詳細は、書籍を参考(P.032 – P.034)にして下さい。
■線形回帰モデル例.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# -*- coding: utf-8 -*- # 1. library import. from __future__ import print_function import torch import matplotlib.pyplot as plt # 2. 線形回帰モデル の 挙動確認. # y = 2 + 3 * x1 * x1 + 4 * x2 * x2 # # torch.Tensor # https://pytorch.org/docs/stable/tensors.html # torch.Tensor is an alias for the default tensor type (torch.FloatTensor). # # w_true = torch.tensor([2, 3, 4]) # tensor([2, 3, 4]) w_true = torch.Tensor([2, 3, 4]) # tensor([2., 3., 4.]) # 3. prepare data. data_count = 500 X0 = torch.randn(data_count, 2) print(X0) print('--------------------------------------------------') X1 = X0 * X0 # Broadcasting. X = torch.cat([torch.ones(data_count, 1), X1], 1) print(X) print('--------------------------------------------------') # 4. compute the true coefficient and the inner product of each X in batch # by the product of matrix and vector. y = torch.mv(X, w_true) + torch.randn(data_count) * 0.5 # y = torch.mv(X, w_true) print(y) print('--------------------------------------------------') ~(略)~ |
■実行結果①(data_count = 10).
1 2 3 4 5 6 7 8 |
~(略)~ [1.0000, 0.7955, 0.2763], [1.0000, 0.5319, 1.3277]]) -------------------------------------------------- tensor([ 2.8867, 7.3405, 7.5650, 12.5030, 11.2085, 17.1577, 15.5873, 2.8067, 5.7816, 9.2496]) -------------------------------------------------- tensor([2.8924, 2.0340, 4.0582], requires_grad=True) |
■実行結果②(data_count = 10).
1 2 3 4 5 6 7 8 |
~(略)~ [1.0000, 1.0873, 0.0707], [1.0000, 0.3970, 3.4036]]) -------------------------------------------------- tensor([20.8009, 30.3586, 3.3634, 9.0505, 5.7447, 3.9322, 2.7843, 2.1391, 5.4978, 17.1587]) -------------------------------------------------- tensor([-0.0309, -9.4697, 2.3776], requires_grad=True) |
■実行結果③(data_count = 500).
1 2 3 4 5 6 |
~(略)~ 6.7367, 7.7044, 5.6503, 6.4688, 3.9203, 6.6951, 9.7749, 8.9205, 5.0567, 3.1883, 2.4842, 11.1703, 14.5386, 13.3721, 2.0347, 6.0471, 8.7057, 3.3889, 2.8237, 8.5143]) -------------------------------------------------- tensor([2.0220, 3.0041, 4.0148], requires_grad=True) |
■注意点として, 以下のことが分かった.
① torch.tensor([2, 3, 4]) と torch.Tensor([2, 3, 4]) は, 別物であること(※tensor/Tensor の 誤記ではない点に注意).
※参照サイトに, “torch.Tensor is an alias for the default tensor type (torch.FloatTensor).” の説明があった.
② サンプル数(data_count) が, 10 の場合は, 実行結果②(data_count = 10) にあるように, 正解値 [2., 3., 4.] から, 大きく外れた値 (ここでは, [-0.0309, -9.4697, 2.3776]) で出力される場合が確認された.
③ サンプル数(data_count) が, 500 の場合は, 正解値 [2., 3., 4.] から, 大きく外れた値を確認出来なかったので, サンプル数 を 増やすことで, 線形回帰の精度が高まったと理解される.
※[F5]キー連打で, 200回程度試してみた.
■参考書籍
現場で使える! PyTorch開発入門 深層学習モデルの作成とアプリケーションへの実装 (AI & TECHNOLOGY)
■参照サイト
torch.Tensor