出力層との違いは、活性化関数がシグモイド関数であることと、backwardメソッドdeltaを求める際に
出力層とは異なる式を利用しています。
class MiddleLayer:
def __init__(self, n_upper, n):
self.w = wb_width * np.random.randn(n_upper, n)
self.b = wb_width * np.random.randn(n)
def forward(self, x):
self.x = x
u = np.dot(x, self.w) + self.b
self.y = 1/(1+np.exp(-u)) #シグモイド関数
def backward(self, grad_y):
delta = grad_y * (1 - self.y)*self.y
self.grad_w = np.dot(self.x.T, delta)
self.grad_b = np.sum(delta, axis=0)
self.grad_x = np.dot(delta, self.w.T)
def update(self, eta):
self.w -= eta * self.grad_w
self.b -= eta * self.grad_b