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实现的Google IP 可用性检测脚本
Apr 23 Python
python检测某个变量是否有定义的方法
May 20 Python
python数据预处理之将类别数据转换为数值的方法
Jul 05 Python
解决Python的str强转int时遇到的问题
Apr 09 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
May 17 Python
Python中的函数式编程:不可变的数据结构
Oct 08 Python
Python模块的加载讲解
Jan 15 Python
Django Rest framework认证组件详细用法
Jul 25 Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 Python
python能做什么 python的含义
Oct 12 Python
python tkinter GUI绘制,以及点击更新显示图片代码
Mar 14 Python
python实现过滤敏感词
May 08 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
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
异步加载script的代码
2011/01/12 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
2013/07/13 Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
2013/07/16 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
AngularJS 使用 UI Router 实现表单向导
2016/01/29 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
Vue 源码分析之 Observer实现过程
2018/03/29 Javascript
Vue 组件封装 并使用 NPM 发布的教程
2018/09/30 Javascript
Vue实现本地购物车功能
2018/12/05 Javascript
vue组件三大核心概念图文详解
2019/05/30 Javascript
Vue路由前后端设计总结
2019/08/06 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
Python多进程并发(multiprocessing)用法实例详解
2015/06/02 Python
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
在Python中调用Ping命令,批量IP的方法
2019/01/26 Python
python实现微信自动回复机器人功能
2019/07/11 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
七一党建活动方案
2014/01/28 职场文书
计算机维护专业推荐信
2014/02/27 职场文书
竞选副班长演讲稿
2014/04/24 职场文书
毕业生工作求职信
2014/06/30 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
2014年国庆节寄语
2014/09/19 职场文书
2014年初三班主任工作总结
2014/12/05 职场文书
2015教师个人年度工作总结
2015/10/23 职场文书
妇产科护理心得体会
2016/01/22 职场文书
《夜莺的歌声》教学反思
2016/02/22 职场文书
教你怎么用Python生成九宫格照片
2021/05/20 Python
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android