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在控制台输出进度条的方法
Jun 20 Python
详解Python 数据库 (sqlite3)应用
Dec 07 Python
Python探索之实现一个简单的HTTP服务器
Oct 28 Python
python实现二叉树的遍历
Dec 11 Python
python实现读Excel写入.txt的方法
Apr 29 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
Aug 12 Python
解决python有时候import不了当前的包问题
Aug 28 Python
python 利用jinja2模板生成html代码实例
Oct 10 Python
Python监听键盘和鼠标事件的示例代码
Nov 18 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
Jan 27 Python
python某漫画app逆向
Mar 31 Python
python异常中else的实例用法
Jun 15 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调用Linux的命令行执行文件压缩命令
2013/01/27 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
javascript document.referrer 用法
2009/04/30 Javascript
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
使用堆实现Top K算法(JS实现)
2015/12/25 Javascript
使用jquery Ajax实现上传附件功能
2018/10/23 jQuery
Element Carousel 走马灯的具体实现
2020/07/26 Javascript
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
python分割和拼接字符串
2013/11/01 Python
python三元运算符实现方法
2013/12/17 Python
python通过ssh-powershell监控windows的方法
2015/06/02 Python
Python编程实现及时获取新邮件的方法示例
2017/08/10 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
pandas多级分组实现排序的方法
2018/04/20 Python
PIL对上传到Django的图片进行处理并保存的实例
2019/08/07 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
python如何进入交互模式
2020/07/06 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
python中random.randint和random.randrange的区别详解
2020/09/20 Python
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
高中毕业自我鉴定
2013/12/19 职场文书
本科毕业生自荐信
2014/06/02 职场文书
2015年乡镇工作总结范文
2015/04/22 职场文书
新闻稿格式范文
2015/07/18 职场文书
情人节单身感言
2015/08/03 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书