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下的XSLT API进行web开发的简单教程
Apr 15 Python
python用10行代码实现对黄色图片的检测功能
Aug 10 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
python实现关键词提取的示例讲解
Apr 28 Python
利用python如何处理nc数据详解
May 23 Python
Python关于excel和shp的使用在matplotlib
Jan 03 Python
Python音频操作工具PyAudio上手教程详解
Jun 26 Python
python3实现斐波那契数列(4种方法)
Jul 15 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
Aug 06 Python
python 数据库查询返回list或tuple实例
May 15 Python
python通过cython加密代码
Dec 11 Python
Python中Cookies导出某站用户数据的方法
May 17 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
德生1994机评
2021/03/02 无线电
php的一个登录的类 [推荐]
2007/03/16 PHP
Yii实现文章列表置顶功能示例
2016/10/18 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
php微信支付之公众号支付功能
2018/05/30 PHP
关于JavaScript的一些看法
2009/05/27 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
js 绑定键盘鼠标事件示例代码
2014/02/12 Javascript
javascript数组操作方法小结和3个属性详细介绍
2014/07/05 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
Google 爬虫如何抓取 JavaScript 的内容
2017/04/07 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
Vue2.0实现调用摄像头进行拍照功能 exif.js实现图片上传功能
2018/04/28 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
vue-cli初始化项目中使用less的方法
2018/08/09 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
vue日历/日程提醒/html5本地缓存功能
2019/09/02 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
Vue如何循环提取对象数组中的值
2020/11/18 Vue.js
[14:24]Optic Gaming vs PSG LGD BO3
2018/06/07 DOTA
python读取和保存视频文件
2018/04/16 Python
python实现图片上添加图片
2019/11/26 Python
简单了解如何封装自己的Python包
2020/07/08 Python
css3+伪元素实现鼠标移入时下划线向两边展开的效果
2017/04/25 HTML / CSS
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
2015年乡镇纪检工作总结
2015/04/22 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
党员转正意见怎么写
2015/06/03 职场文书
想创业成功,需要掌握这些要点
2019/12/06 职场文书
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP
SpringBoot整合Minio文件存储
2022/04/03 Java/Android
Nginx安装配置详解
2022/06/25 Servers
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技