【pythonでニューラルネットワーク#2】単回帰分析(勾配降下法)
記事の目的
pythonで単回帰分析を勾配降下法を使用して実装していきます。ここにある全てのコードは、コピペで再現することが可能です。
目次
1 勾配降下法の概要
2 ライブラリとデータの作成
# In[1] import numpy as np import matplotlib.pyplot as plt np.random.seed(1) # In[2] x_train = np.random.normal(5, 1, 10) t_train = 3*x_train + 2 + np.random.randn(10) # x_train = (x_train - x_train.mean())/x_train.std() # t_train = (t_train - t_train.mean())/t_train.std() # In[3] plt.scatter(x_train,t_train)
3 モデル
# In[4] def model(x ,w, b): y = w*x + b return y # In[5] def loss(y, t): L = sum((y-t)**2) / len(t) return L # In[6] def optimizer(x, y, t, w, b, lr): dy = 2*(y-t) / len(t) dw = np.dot(dy, x) db = dy.sum() w = w - lr*dw b = b - lr*db return (w,b)
4 モデルの学習
# In[7] w,b = 0.5, 0.5 for epoch in range(1, 10 + 1): y = model(x_train, w, b) loss_train = loss(y, t_train) w,b = optimizer(x_train, y, t_train, w, b, lr=1e-2) print(f"Epoch {epoch}, Loss {loss_train:.4f}")
5 結果の可視化
# In[8] x = np.arange(2,8) y = model(x, w, b) plt.plot(x, y) plt.scatter(x_train, t_train)