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发送邮件接收邮件示例分享
Jan 21 Python
利用Python实现简单的相似图片搜索的教程
Apr 23 Python
用Python实现命令行闹钟脚本实例
Sep 05 Python
Django添加sitemap的方法示例
Aug 06 Python
详解Python3中的迭代器和生成器及其区别
Oct 09 Python
如何运行.ipynb文件的图文讲解
Jun 27 Python
python urllib爬虫模块使用解析
Sep 05 Python
通过实例简单了解Python中yield的作用
Dec 11 Python
django列表筛选功能的实现代码
Mar 27 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
Jul 20 Python
浅谈Python数学建模之固定费用问题
Jun 23 Python
Python的property属性详细讲解
Apr 11 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在模型中自动完成session赋值小教程
2014/09/05 PHP
PHP提高编程效率的20个要点
2015/09/23 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
Javascript在IE或Firefox下获取鼠标位置的代码
2009/12/18 Javascript
jquery插件之easing使用
2010/08/19 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
jQuery设置与获取HTML,文本和值的简单实例
2014/02/26 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
如何利用node转发请求详解
2020/09/17 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
Python语言描述KNN算法与Kd树
2017/12/13 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
python三大神器之fabric使用教程
2019/06/10 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
2019/08/22 Python
Python类反射机制使用实例解析
2019/12/30 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
python关于倒排列的知识点总结
2020/10/13 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
医学检验专业大学生求职信
2013/11/18 职场文书
实习自我鉴定
2013/12/15 职场文书
《北京的春节》教学反思
2014/04/07 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
会议通知范文
2015/04/15 职场文书
2015年司机工作总结
2015/04/23 职场文书
在校生证明
2015/06/17 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
导游词之阆中古城
2019/12/23 职场文书
golang 比较浮点数的大小方式
2021/05/02 Golang
SQL基础查询和LINQ集成化查询
2022/01/18 MySQL