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中面向对象编程的相关知识
May 25 Python
Python编程求质数实例代码
Jan 31 Python
教你用Python创建微信聊天机器人
Mar 31 Python
python3+PyQt5实现拖放功能
Apr 24 Python
Python二叉树定义与遍历方法实例分析
May 25 Python
python3.4实现邮件发送功能
May 28 Python
Django集成CAS单点登录的方法示例
Jun 10 Python
wxPython绘图模块wxPyPlot实现数据可视化
Nov 19 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
Python爬虫与反爬虫大战
Jul 30 Python
PyCharm 光标变成黑块的解决方式
Feb 06 Python
python基础之模块的导入
Oct 24 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中关于抽象(abstract)类和抽象方法的问题分析
2014/01/03 PHP
PHP实现加密的几种方式介绍
2015/02/22 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
2016/05/18 PHP
THINKPHP在添加数据的时候获取主键id的值方法
2017/04/03 PHP
JavaScript中链式调用之研习
2011/04/07 Javascript
jquery移动节点实例
2015/01/14 Javascript
js实现图片轮播效果
2015/12/19 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
2017/05/02 Javascript
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
深入理解Vue keep-alive及实践总结
2019/08/21 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
python实现360的字符显示界面
2014/02/21 Python
使用grappelli为django admin后台添加模板
2014/11/18 Python
Python中的localtime()方法使用详解
2015/05/22 Python
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
python实现外卖信息管理系统
2018/01/11 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
Django REST Framework 分页(Pagination)详解
2020/11/30 Python
德国隐形眼镜店:LuckyLens
2018/07/29 全球购物
StubHub澳大利亚:购买或出售您的门票
2019/08/01 全球购物
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
团组织关系介绍信
2014/01/12 职场文书
年度考核自我评价
2014/01/25 职场文书
青春寄语大全
2014/04/09 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
教育读书笔记
2015/07/02 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
2021/04/05 Python
Golang 切片(Slice)实现增删改查
2022/04/22 Golang
利用Python实时获取steam特惠游戏数据
2022/06/25 Python