その他

【pythonでディープラーニング】バックプロパケーション回帰 中間層編 

出力層との違いは、活性化関数がシグモイド関数であることと、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