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模块的方法详解
Sep 18 Python
使用django-crontab实现定时任务的示例
Feb 26 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
基于python OpenCV实现动态人脸检测
May 25 Python
数据清洗--DataFrame中的空值处理方法
Jul 03 Python
python安装twisted的问题解析
Aug 21 Python
Python寻找两个有序数组的中位数实例详解
Dec 05 Python
简单了解django缓存方式及配置
Jul 19 Python
Python使用微信接入图灵机器人过程解析
Nov 04 Python
jupyter notebook运行命令显示[*](解决办法)
May 18 Python
Python logging日志模块 配置文件方式
Jul 12 Python
Python还能这么玩之只用30行代码从excel提取个人值班表
Jun 05 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的Laravel框架中Eloquent对象关系映射使用
2016/02/26 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
thinkPHP实现的联动菜单功能详解
2017/05/05 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
php微信开发之谷歌测距
2018/06/14 PHP
javascript下4个跨浏览器必备的函数
2010/03/07 Javascript
一些主流JS框架中DOMReady事件的实现小结
2011/02/12 Javascript
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
js实现目录定位正文示例
2013/11/14 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
JS实现可用滑块滑动的缓动图代码
2019/09/01 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
[00:35]TI7不朽珍藏III——寒冰飞龙不朽展示
2017/07/15 DOTA
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python中列表和元组的区别
2017/12/18 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
2018/01/04 Python
Python操作Excel插入删除行的方法
2018/12/10 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
简单了解python的一些位运算技巧
2019/07/13 Python
Python实现多线程/多进程的TCP服务器
2019/09/03 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
Python 实现一行输入多个数字(用空格隔开)
2020/04/29 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
Ruby如何创建一个线程
2013/03/10 面试题
学前教育专业毕业生自荐信
2013/10/03 职场文书
学生会竞选自荐信
2013/10/12 职场文书
银行会计业务的个人自我评价
2013/11/02 职场文书
安全资料员岗位职责范本
2014/06/28 职场文书
带香烟到学校抽的检讨书
2014/09/25 职场文书
使用Pytorch训练two-head网络的操作
2021/05/28 Python