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 23 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
Mar 31 Python
在Python中marshal对象序列化的相关知识
Jul 01 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
May 25 Python
python自动12306抢票软件实现代码
Feb 24 Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 Python
Django在pycharm下修改默认启动端口的方法
Jul 26 Python
python opencv将表格图片按照表格框线分割和识别
Oct 30 Python
Pandas操作CSV文件的读写实现方法
Nov 13 Python
Tensorflow累加的实现案例
Feb 05 Python
Python中实现输入一个整数的案例
May 03 Python
Python中的 No Module named ***问题及解决
Jul 23 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校验ISBN码的函数代码
2011/01/17 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
PHP中file_put_contents追加和换行的实现方法
2017/04/01 PHP
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
JS target与currentTarget区别说明
2011/08/28 Javascript
chrome下jq width()方法取值为0的解决方法
2014/05/26 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
jQuery表格插件datatables用法汇总
2016/03/29 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
关于原生js中bind函数的简单实现
2016/08/10 Javascript
javascript自执行函数
2017/02/10 Javascript
Bootstrap模态框案例解析
2017/03/05 Javascript
JS计算两个时间相差分钟数的方法示例
2018/01/10 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
详解webpack编译速度提升之DllPlugin
2019/02/05 Javascript
node微信开发之获取access_token+自定义菜单
2019/03/17 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
Python自动连接ssh的方法
2015/03/07 Python
Python的dict字典结构操作方法学习笔记
2016/05/07 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
Django后台admin的使用详解
2019/07/08 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
python中操作文件的模块的方法总结
2021/02/04 Python
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
存储过程和函数的区别
2013/05/28 面试题
电脑租赁公司创业计划书
2014/01/08 职场文书
老同学聚会感言
2014/02/23 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
教师党员个人总结
2015/02/10 职场文书
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis