python实现BackPropagation算法


Posted in Python onDecember 14, 2017

实现神经网络的权重和偏置更新,很重要的一部就是使用BackPropagation(反向传播)算法。具体来说,反向传播算法就是用误差的反向传播来计算w(权重)和b(偏置)相对于目标函数的导数,这样就可以在原来的w,b的基础上减去偏导数来更新。其中我上次写的python实现梯度下降中有一个函数backprop(x,y)就是用来实现反向传播的算法。(注:代码并非自己总结,github上有这个代码的实现https://github.com/LCAIZJ/neural-networks-and-deep-learning)

def backprop(self,x,y):
  nabla_b = [np.zeros(b.shape) for b in self.biases]
  nabla_w = [np.zeros(w.shape) for w in self.weights]
  # 通过输入x,前向计算输出层的值
  activation = x
  activations = [x]# 存储的是所以的输出层
  zs = []
  for b,w in zip(self.biases,self.weights):
    z = np.dot(w,activation)+b
    zs.append(z)
    activation = sigmoid(z)
    activations.append(activation)
  # 计算输出层的error
  delta = self.cost_derivative(activations[-1],y)*sigmoid_prime(zs[:-1])
  nabla_b[-1] = delta
  nabla_w[-1] = np.dot(delta,activations[-2].transpose())
  #反向更新error
  for l in xrange(2,self.num_layers):
    z = zs[-l]
    sp = sigmoid_prime(z)
    delta = np.dot(self.weight[-l+1].transpose(),delta)*sp
    nabla_b[-l] = delta
    nabla_w[-l] = np.dot(delta,activations[-l-1].transpose())
  return (nabla_b,nabla_w)

其中,传入的x和y是一个单独的实例。

def cost_derivative(self,output_activation,y):
  return (output_activation-y)
def sigmoid(z):
  return 1.0/(1.0+np.exp(z))
def sigmoid_prime(z):
  return sigmoid(z)*(1-sigmoid(z))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现端口复用实例代码
Jul 03 Python
Python内置数据类型详解
Aug 18 Python
Python转换HTML到Text纯文本的方法
Jan 15 Python
实例说明Python中比较运算符的使用
May 13 Python
python3.5使用tkinter制作记事本
Jun 20 Python
python入门前的第一课 python怎样入门
Mar 06 Python
Django实现支付宝付款和微信支付的示例代码
Jul 25 Python
wxPython绘图模块wxPyPlot实现数据可视化
Nov 19 Python
用python3读取python2的pickle数据方式
Dec 25 Python
pycharm第三方库安装失败的问题及解决经验分享
May 09 Python
Matplotlib配色之Colormap详解
Jan 05 Python
python爬虫智能翻页批量下载文件的实例详解
Feb 02 Python
python实现随机梯度下降(SGD)
Mar 24 #Python
Python实现将一个正整数分解质因数的方法分析
Dec 14 #Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
Dec 14 #Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 #Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 #Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 #Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 #Python
You might like
基于php-fpm 参数的深入理解
2013/06/03 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
2015/04/08 PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
2017/02/15 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
PHP生成加减算法方式的验证码实例
2018/03/12 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
JavaScript 拾漏补遗
2009/12/27 Javascript
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
2013/06/24 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
2015/08/18 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
2016/08/01 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
win系统下nodejs环境安装配置
2017/05/04 NodeJs
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
Vue入门之animate过渡动画效果
2018/04/08 Javascript
原生Vue 实现右键菜单组件功能
2019/12/16 Javascript
jQuery实现鼠标拖拽登录框移动效果
2020/09/13 jQuery
解决vue打包报错Unexpected token: punc的问题
2020/10/24 Javascript
python中getattr函数使用方法 getattr实现工厂模式
2014/01/20 Python
python检测lvs real server状态
2014/01/22 Python
分析在Python中何种情况下需要使用断言
2015/04/01 Python
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
Python numpy实现二维数组和一维数组拼接的方法
2018/06/05 Python
Python将多个list合并为1个list的方法
2018/06/27 Python
python爬取微信公众号文章的方法
2019/02/26 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
2019/04/27 Python
通过实例学习Python Excel操作
2020/01/06 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
安装pyinstaller遇到的各种问题(小结)
2020/11/20 Python
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
世界红十字日活动总结
2015/02/10 职场文书
世界遗产导游词
2015/02/13 职场文书