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实现简单多线程任务队列
Feb 27 Python
Python科学计算之NumPy入门教程
Jan 15 Python
详解python函数传参是传值还是传引用
Jan 16 Python
Python分支结构(switch)操作简介
Jan 17 Python
对python_discover方法遍历所有执行的用例详解
Feb 13 Python
详解Python3序列赋值、序列解包
May 14 Python
Python循环实现n的全排列功能
Sep 16 Python
python基于FTP实现文件传输相关功能代码实例
Sep 28 Python
pytorch加载自定义网络权重的实现
Jan 07 Python
Python如何把多个PDF文件合并代码实例
Feb 13 Python
Python pip 常用命令汇总
Oct 19 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 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
yii框架源码分析之创建controller代码
2011/06/28 PHP
PHP @ at 记号的作用示例介绍
2014/10/10 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
jQuery源码分析之Event事件分析
2010/06/07 Javascript
Javascript实现DIV滚动自动滚动到底部的代码
2012/03/01 Javascript
浅谈jQuery中height与width
2015/07/06 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
Web安全测试之XSS实例讲解
2016/08/15 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
Node.js中多进程模块Cluster的介绍与使用
2017/05/27 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
2018/01/20 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
答题辅助python代码实现
2018/01/16 Python
Python 在字符串中加入变量的实例讲解
2018/05/02 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
2018/12/19 Python
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
String这个类型的class为何定义成final?
2012/11/13 面试题
庆元旦广播稿
2014/02/10 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
会计人员演讲稿
2014/09/11 职场文书
实习科室评语
2015/01/04 职场文书
旷课检讨书
2015/01/26 职场文书
参观监狱警示教育心得体会
2016/01/15 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js
mysql分组后合并显示一个字段的多条数据方式
2022/01/22 MySQL
vue使用element-ui按需引入
2022/05/20 Vue.js