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
Python多线程同步Lock、RLock、Semaphore、Event实例
Nov 21 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
Aug 30 Python
详解python并发获取snmp信息及性能测试
Mar 27 Python
对python中的logger模块全面讲解
Apr 28 Python
Python学习笔记之自定义函数用法详解
Jun 08 Python
Python3 实现减少可调用对象的参数个数
Dec 20 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
Feb 11 Python
python实现从ftp服务器下载文件
Mar 03 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
Nov 17 Python
Python 数据可视化神器Pyecharts绘制图像练习
Feb 28 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
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
php动态绑定变量的用法
2015/06/16 PHP
php生成过去100年下拉列表的方法
2015/07/20 PHP
定义select的边框颜色
2008/04/28 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
jquery中prop()方法和attr()方法的区别浅析
2013/09/06 Javascript
js中的this关键字详解
2013/09/25 Javascript
jQuery中:disabled选择器用法实例
2015/01/04 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
2016/09/19 Javascript
node实现简单的反向代理服务器
2017/07/26 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
详解webpack自定义loader初探
2018/08/29 Javascript
详解微信小程序获取当前时间及日期的方法
2019/04/28 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
Python正则替换字符串函数re.sub用法示例
2017/01/19 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
python中的句柄操作的方法示例
2019/06/20 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
财务部经理岗位职责
2014/02/03 职场文书
家具促销活动方案
2014/02/16 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
现役军人家属慰问信
2015/03/24 职场文书
行政司机岗位职责
2015/04/10 职场文书
Python WSGI 规范简介
2021/04/11 Python
关于python类SortedList详解
2021/09/04 Python
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers