Network类 ——feedforward

93 阅读1分钟

feedforward

代码:

    def feedforward(self, a):
        for b, w in zip(self.biases, self.weights):
            a = sigmoid(np.dot(w, a) + b)
        return a

知识补充:np.dot() 实现向量、矩阵的乘法

疑问:具体执行过程

zip(self.biases, self.weights) 长什么样?

长这样,共三块:

    [(array([[1.8928998 ],
             [0.27780261],
             [0.62579226]]),
      array([[-1.5030043 ,  0.9752074 , -0.15920991],
             [-1.16084287, -0.6642741 , -3.69267419],
             [ 0.3134075 ,  0.07746114, -1.7835172 ]])),
     (array([[-1.54090681],
             [ 0.51127026],
             [-1.65926419],
             [ 2.1043574 ]]),
      array([[-0.42022251,  0.69884411,  1.14209824],
             [ 3.48988776, -0.34207016,  0.36057217],
             [ 1.36683807,  0.01388662,  1.27488846],
             [-0.9303635 , -0.10077633, -0.15528635]])),
     (array([[1.0806595]]),
      array([[1.17643786, 1.30079632, 0.73613014, 0.15250229]]))]

循环过程:

  • 第一块:
 b:
       [[1.8928998 ],     # (2, 1)
        [0.27780261],     # (2, 2)
        [0.62579226]]     # (2, 3)
 w:
       [[-1.5030043 , 0.9752074 , -0.15920991],     # (1, 1)->(2, 1), (1, 2)->(2, 1), (1, 3)->(2, 1)
        [-1.16084287, -0.6642741 , -3.69267419],    # (1, 1)->(2, 2), (1, 2)->(2, 2), (1, 3)->(2, 2)
        [ 0.3134075 , 0.07746114, -1.7835172 ]]     # (1, 1)->(2, 3), (1, 2)->(2, 3), (1, 3)->(2, 3)

执行np.dot(w, a) + b



声明:假设a:

            [[1],
             [2],
             [3]] 

image.png

  • in

      # a : 3 * 1
      a = [[1],
           [2],
           [3]]
    
      # w : 3 * 3
      w = [[-1.5030043 , 0.9752074 , -0.15920991],     
           [-1.16084287, -0.6642741 , -3.69267419],    
           [ 0.3134075 , 0.07746114, -1.7835172 ]]    
    
      # b : 3 * 1
      b = [[1.8928998 ],     
           [0.27780261],     
           [0.62579226]]  
    
      outcome = np.dot(w, a) + b
    
      outcome
    
  • out

    array([[  1.86268057],
           [-13.28961103],
           [ -4.25642956]])
    

把代码后面的数学计算过程实现了一遍,舒服多了