作家
登录

神经网络中 BP 算法的原理与 Python 实现源码解析

作者: 来源: 2017-06-01 08:55:31 阅读 我要评论

 l in xrange(2self.num_layers): 
  •         # 大年夜倒数第 **l** 层开端更新,**-l** 是 python 中特有的语法表示大年夜倒数第 l 层开端计算 
  •         # 下面这里应用 **l+1** 层的 δ 值来计算 **l** 的 δ 值 
  •         z = zs[-l] 
  •         sp = sigmoid_prime(z) 
  •         delta = np.dot(self.weights[-l+1].transpose(), delta) * sp 
  •         nabla_b[-l] = delta 
  •         nabla_w[-l] = np.dot(delta, activations[-l-1].transpose()) 
  •     return (nabla_b, nabla_w) 
  • 接下来则是 evaluate 的实现,调用 feedforward 办法盘似揭捉?练好的神经收集的输出层神经元值(也即猜测值),然后比对精确值和猜测值获得精确率。

    1. def evaluate(self, test_data): 
    2.     # 获得猜测结不雅 
    3.     test_results = [(np.argmax(self.feedforward(x)), y) 
    4.                     for (x, y) in test_data] 
    5.     # 返回精确识其余个数 
    6.     return sum(int(x == y) for (x, y) in test_results) 

    最后,我们可以应用这个源率攀来练习一个手写数字识其余神经收集,并输出评估的结不雅,代码如下:

    1. import mnist_loader 
    2. import network 
    3.  
    4. training_data, validation_data, test_data = mnist_loader.load_data_wrapper() 
    5. net = network.Network([7843010]) 
    6. net.SGD(training_data, 30103.0, test_data = test_data) 
    7. # 输出结不雅 
    8. # Epoch 0: 9038 / 10000 
    9. # Epoch 1: 9178 / 10000 
    10. # Epoch 2: 9231 / 10000 
    11. # ... 
    12. # Epoch 27: 9483 / 10000 
    13. # Epoch 28: 9485 / 10000 
    14. # Epoch 29: 9477 / 10000 

    可以看到,在经由 30 轮的迭代后,辨认手写神经收集的精确度在 95% 阁下,当然,设置不合的迭代次数,进修率以取样数对精度都邑有影响,若何调参也是一门技巧活,这个坑就后期再填吧。


      推荐阅读

      PHP底层的运行机制与原理解析

    PHP说简单,然则要精晓也不是一件简单的事。我们除了会应用之外,还得知道它底层的工作道理。懂得PHP底层实现的目标是什么?动态说话要像用好起首得懂得它,内存治理、框架模型值得我们借鉴>>>详细阅读


    本文标题:神经网络中 BP 算法的原理与 Python 实现源码解析

    地址:http://www.17bianji.com/lsqh/35499.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)