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编写批量卸载手机中安装的android应用脚本
Jul 21 Python
浅析Python中return和finally共同挖的坑
Aug 18 Python
详解python实现线程安全的单例模式
Mar 05 Python
浅谈Pandas中map, applymap and apply的区别
Apr 10 Python
python读取中文txt文本的方法
Apr 12 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 Python
Python 旋转打印各种矩形的方法
Jul 09 Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 Python
Python爬虫实现“盗取”微信好友信息的方法分析
Sep 16 Python
Python 解析库json及jsonpath pickle的实现
Aug 17 Python
如何通过python检查文件是否被占用
Dec 18 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
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
JavaScript 节点操作 以及DOMDocument属性和方法
2007/12/06 Javascript
javascript优先加载笔记代码
2008/09/30 Javascript
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
2016/08/15 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
2019/10/30 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
Python中property函数用法实例分析
2018/06/04 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
基于python实现把图片转换成素描
2019/11/13 Python
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
竞选班长演讲稿
2013/12/30 职场文书
十八届三中全会报告学习材料
2014/02/17 职场文书
建筑设计专业求职自我评价
2014/03/02 职场文书
《桥》教学反思
2014/04/09 职场文书
企业家王石演讲稿:坚持与放下
2014/04/27 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
先进个人申报材料
2014/12/30 职场文书
面试感谢信范文
2015/01/22 职场文书
百万英镑观后感
2015/06/09 职场文书
员工考勤管理制度
2015/08/06 职场文书
创业计划书之电动车企业
2019/10/11 职场文书
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS
PYTHON InceptionV3模型的复现详解
2022/05/06 Python