Python使用numpy实现BP神经网络


Posted in Python onMarch 10, 2018

本文完全利用numpy实现一个简单的BP神经网络,由于是做regression而不是classification,因此在这里输出层选取的激励函数就是f(x)=x。BP神经网络的具体原理此处不再介绍。

import numpy as np 
 
class NeuralNetwork(object): 
  def __init__(self, input_nodes, hidden_nodes, output_nodes, learning_rate): 
    # Set number of nodes in input, hidden and output layers.设定输入层、隐藏层和输出层的node数目 
    self.input_nodes = input_nodes 
    self.hidden_nodes = hidden_nodes 
    self.output_nodes = output_nodes 
 
    # Initialize weights,初始化权重和学习速率 
    self.weights_input_to_hidden = np.random.normal(0.0, self.hidden_nodes**-0.5,  
                    ( self.hidden_nodes, self.input_nodes)) 
 
    self.weights_hidden_to_output = np.random.normal(0.0, self.output_nodes**-0.5,  
                    (self.output_nodes, self.hidden_nodes)) 
    self.lr = learning_rate 
     
    # 隐藏层的激励函数为sigmoid函数,Activation function is the sigmoid function 
    self.activation_function = (lambda x: 1/(1 + np.exp(-x))) 
   
  def train(self, inputs_list, targets_list): 
    # Convert inputs list to 2d array 
    inputs = np.array(inputs_list, ndmin=2).T  # 输入向量的shape为 [feature_diemension, 1] 
    targets = np.array(targets_list, ndmin=2).T  
 
    # 向前传播,Forward pass 
    # TODO: Hidden layer 
    hidden_inputs = np.dot(self.weights_input_to_hidden, inputs) # signals into hidden layer 
    hidden_outputs = self.activation_function(hidden_inputs) # signals from hidden layer 
 
     
    # 输出层,输出层的激励函数就是 y = x 
    final_inputs = np.dot(self.weights_hidden_to_output, hidden_outputs) # signals into final output layer 
    final_outputs = final_inputs # signals from final output layer 
     
    ### 反向传播 Backward pass,使用梯度下降对权重进行更新 ### 
     
    # 输出误差 
    # Output layer error is the difference between desired target and actual output. 
    output_errors = (targets_list-final_outputs) 
 
    # 反向传播误差 Backpropagated error 
    # errors propagated to the hidden layer 
    hidden_errors = np.dot(output_errors, self.weights_hidden_to_output)*(hidden_outputs*(1-hidden_outputs)).T 
 
    # 更新权重 Update the weights 
    # 更新隐藏层与输出层之间的权重 update hidden-to-output weights with gradient descent step 
    self.weights_hidden_to_output += output_errors * hidden_outputs.T * self.lr 
    # 更新输入层与隐藏层之间的权重 update input-to-hidden weights with gradient descent step 
    self.weights_input_to_hidden += (inputs * hidden_errors * self.lr).T 
  
  # 进行预测   
  def run(self, inputs_list): 
    # Run a forward pass through the network 
    inputs = np.array(inputs_list, ndmin=2).T 
     
    #### 实现向前传播 Implement the forward pass here #### 
    # 隐藏层 Hidden layer 
    hidden_inputs = np.dot(self.weights_input_to_hidden, inputs) # signals into hidden layer 
    hidden_outputs = self.activation_function(hidden_inputs) # signals from hidden layer 
     
    # 输出层 Output layer 
    final_inputs = np.dot(self.weights_hidden_to_output, hidden_outputs) # signals into final output layer 
    final_outputs = final_inputs # signals from final output layer  
     
    return final_outputs

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的批量下载RFC文档
Mar 10 Python
使用Python的Tornado框架实现一个简单的WebQQ机器人
Apr 24 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
Jul 02 Python
Python遍历文件夹和读写文件的实现方法
May 10 Python
python实现最长公共子序列
May 22 Python
打包python 加icon 去掉cmd黑窗口方法
Jun 24 Python
Python绘图实现显示中文
Dec 04 Python
pytorch载入预训练模型后,实现训练指定层
Jan 06 Python
Python多线程Threading、子线程与守护线程实例详解
Mar 24 Python
利用Python自动化操作AutoCAD的实现
Apr 01 Python
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
Nov 11 Python
使用python生成大量数据写入es数据库并查询操作(2)
Sep 23 Python
python实现日常记账本小程序
Mar 10 #Python
python实现简单神经网络算法
Mar 10 #Python
TensorFlow saver指定变量的存取
Mar 10 #Python
TensorFLow用Saver保存和恢复变量
Mar 10 #Python
tensorflow创建变量以及根据名称查找变量
Mar 10 #Python
Python2中文处理纪要的实现方法
Mar 10 #Python
python实现冒泡排序算法的两种方法
Mar 10 #Python
You might like
第二章 PHP入门基础之php代码写法
2011/12/30 PHP
分享php邮件管理器源码
2016/01/06 PHP
浅谈PHP表单提交(POST&GET&URL编/解码)
2017/04/03 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
jQuery 全选效果实现代码
2009/03/23 Javascript
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
JavaScript 事件的一些重要说明
2009/10/25 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
2013/04/27 Javascript
javascript打印输出json实例
2013/11/11 Javascript
JS 日期比较大小的简单实例
2014/01/13 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
2016/12/12 Javascript
DOM事件探秘篇
2017/02/15 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
JS删除数组里的某个元素方法
2018/02/03 Javascript
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
浅谈Python单向链表的实现
2015/12/24 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
2018/01/02 Python
python发送邮件脚本
2018/05/22 Python
python 自定义异常和异常捕捉的方法
2018/10/18 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
Python3中的bytes和str类型详解
2019/05/02 Python
python实现广度优先搜索过程解析
2019/10/19 Python
python实现逆滤波与维纳滤波示例
2020/02/26 Python
Python Json数据文件操作原理解析
2020/05/09 Python
新西兰购物网站:TheMarket NZ
2020/09/19 全球购物
开工仪式策划方案
2014/05/23 职场文书
防邪知识进家庭活动方案
2014/08/26 职场文书
2014中学教师节广播稿
2014/09/10 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书