【pythonでニューラルネットワーク#5】単回帰分析(パラメータ更新)
記事の目的
pythonで単回帰分析のパラメータ更新を実装していきます。ここにある全てのコードは、コピペで再現することが可能です。
目次
1 パラメータ更新の概要
2 ライブラリと関数のクラス
# In[1] import numpy as np import matplotlib.pyplot as plt # In[2] class Optimizer: def step(self, lr): self.w -= lr * self.dw self.b -= lr * self.db # In[3] class Linear(Optimizer): def __init__(self): self.w = 2 self.b = 1 def forward(self,x): self.x = x self.y = self.w*x + self.b return self.y def backward(self, dy): self.dw = np.dot(dy, self.x) self.db = dy.sum() # In[4] class Loss: def forward(self, y, t): self.y = y self.t = t L = sum((y-t)**2)/len(t) return L def backward(self): dy = 2*(self.y - self.t) / len(self.t) return dy # In[5] model = Linear() loss = Loss()
3 順伝播
# In[6] x = np.array([1,2]) t = np.array([5,8]) # In[7] y = model.forward(x) L = loss.forward(y,t) print(y, L)
4 逆伝播
# In[8] dy = loss.backward() model.backward(dy) print(dy, model.dw, model.db)
5 パラメータ更新
# In[9] model.step(lr=1e-2) print(model.w, model.b) # In[10] for i in range(100): y = model.forward(x) L = loss.forward(y,t) dy = loss.backward() model.backward(dy) model.step(lr=1e-2) print(model.w, model.b)