初心者向けです!ディープラーニングの基礎的な知識があることを前提としています。
機械学習ライブラリのPytorchを用いて線形回帰を実装してみます。
簡単なので機械学習の入門として最適です。
##Pytorchとは?
Facebookの人工知能研究グループにより初期開発された 、Python向けのオープンソース機械学習ライブラリです。読み方はパイトーチです。
Deep Learningライブラリの中でも近年人気が出てきています。非常に簡単に記述できるのでおすすめです。
##Google Colaboratoryとは?
Googleが提供している、無料で使用できるpython実行環境です。
GPUも使用でき機械学習に必要なライブラリもあらかじめインストールされています。ローカルで機械学習の環境を構築するのは大変なので、今回はGoogle Colaboratoryを使用していこうと思います。
使い方は下記参照。1分程で使えるようになります。
https://qiita.com/shoji9x9/items/0ff0f6f603df18d631ab
##線形回帰を実装してみる
必要なライブラリをインストールします。
import torch
from torch import nn
import matplotlib.pyplot as plt
import numpy as np
ランダムな分布モデルを作成してプロットしてみましょう。
この図に対して線形回帰します。
x = torch.randn(100, 1) * 10
y = x + torch.randn(100, 1) * 3
plt.plot(x.numpy(), y.numpy(), "o")
plt.ylabel("y")
plt.xlabel("x")
線形回帰のモデルを定義します。nn.Moduleを継承し、__init__内でインプットとアプトプットのサイズを指定したモデルを定義しています。
class LR(nn.Module):
def __init__(self, input_size, output_size):
super().__init__()
self.linear = nn.Linear(input_size, output_size)
def forward(self, x):
pred = self.linear(x)
return pred
乱数のseedを固定します。線形回帰のモデルのインスタンスを作成します。
torch.manual_seed(1)
model = LR(1, 1)
モデルのパラメーターを取り出す関数を定義。
[w, b] = model.parameters()
def get_params():
return (w[0][0].item(), b[0].item())
プロットする関数を定義。モデルからパラメータを取り出してy1を定義しています。
def plot_fit(title):
plt_title = title
w1, b1 = get_params()
x1 = np.array([-30, 30])
y1 = w1*x1 + b1
plt.plot(x1, y1, "r")
plt.scatter(x, y)
plt.show()
学習前の図をプロットしてみましょう。学習前なので赤い線がずれているのがわかります。
plot_fit("initial Model")
それでは学習する前準備です。
損失関数は二乗平均誤差、学習方法は確率的勾配降下法に定義します。learning rateは0.01にしてます。
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr = 0.01)
それでは学習してみましょう!エポックは100にしてます。lossを記録しておきます。
epochs = 100
losses = []
for i in range(epochs):
y_pred = model.forward(x)
loss = criterion(y_pred, y)
print("epoch:", i, "loss:", loss.item())
losses.append(loss)
optimizer.zero_grad()
loss.backward()
optimizer.step()
学習経過を見てみましょう。
plt.plot(range(epochs), losses)
plt.ylabel("Loss")
plt.xlabel("epoch")
学習できているのがわかると思います。
学習後の図をプロットしてみましょう。
plot_fit("Trained Model")
ちゃんと学習できているのがわかると思います。
以上です。お疲れ様でした!
pytorchを使用して線形回帰を学習してみました。Pytorchと Google Colaboratory を使えばかなり簡単に機械学習を体験できるので、ぜひみなさんも試してみてください!!