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