
【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)