Python使用numpy实现BP神经网络

本文完全利用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使用numpy实现BP神经网络的更多相关文章

  1. BP神经网络原理及python实现

    [废话外传]:终于要讲神经网络了,这个让我踏进机器学习大门,让我读研,改变我人生命运的四个字!话说那么一天,我在乱点百度,看到了这样的内容: 看到这么高大上,这么牛逼的定义,怎么能不让我这个技术宅男心 ...

  2. Python实现bp神经网络识别MNIST数据集

    title: "Python实现bp神经网络识别MNIST数据集" date: 2018-06-18T14:01:49+08:00 tags: [""] cat ...

  3. BP神经网络在python下的自主搭建梳理

    本实验使用mnist数据集完成手写数字识别的测试.识别正确率认为是95% 完整代码如下: #!/usr/bin/env python # coding: utf-8 # In[1]: import n ...

  4. 三层BP神经网络的python实现

    这是一个非常漂亮的三层反向传播神经网络的python实现,下一步我准备试着将其修改为多层BP神经网络. 下面是运行演示函数的截图,你会发现预测的结果很惊人! 提示:运行演示函数的时候,可以尝试改变隐藏 ...

  5. python手写bp神经网络实现人脸性别识别1.0

    写在前面:本实验用到的图片均来自google图片,侵删! 实验介绍 用python手写一个简单bp神经网络,实现人脸的性别识别.由于本人的机器配置比较差,所以无法使用网上很红的人脸大数据数据集(如lf ...

  6. python对BP神经网络实现

    python对BP神经网络实现 一.概念理解 开始之前首先了解一下BP神经网络,BP的英文是back propagationd的意思,它是一种按误差反向传播(简称误差反传)训练的多层前馈网络,其算法称 ...

  7. BP神经网络与Python实现

    人工神经网络是一种经典的机器学习模型,随着深度学习的发展神经网络模型日益完善. 联想大家熟悉的回归问题, 神经网络模型实际上是根据训练样本创造出一个多维输入多维输出的函数, 并使用该函数进行预测, 网 ...

  8. python构建bp神经网络_曲线拟合(一个隐藏层)__2.代码实现

    IDE:jupyter 抽象程度可能不是那么高,以后再优化. 理论和代码实现的差距还是挺大的 数据集请查看 python构建bp神经网络(一个隐藏层)__1.数据可视化 部分代码预览 git上传.ip ...

  9. 机器学习:python使用BP神经网络示例

    1.简介(只是简单介绍下理论内容帮助理解下面的代码,如果自己写代码实现此理论不够) 1) BP神经网络是一种多层网络算法,其核心是反向传播误差,即: 使用梯度下降法(或其他算法),通过反向传播来不断调 ...

随机推荐

  1. VOJ 1049送给圣诞夜的礼物——矩阵快速幂模板

    题意 顺次给出 $m$个置换,反复使用这 $m$ 个置换对一个长为 $n$ 初始序列进行操作,问 $k$ 次置换后的序列.$m<=10, k<2^31$. 题目链接 分析 对序列的置换可表 ...

  2. Spring Jpa

    一对多 1.application.properties 2.Dao层 3.Controller 3.1级联添加数据 3.2查询数据 3.3删除数据 多对多 1.查询 2.添加

  3. [INS-07003] 访问 BeanStore 时出现意外错误

    oracle安装时出现以下问题: 原因:未配置环境变量CLASSPASH 解决方法:新增系统变量 变量名:CLASSPASH 变量值: .;%JAVA_HOME%\lib;%JAVA_HOME%\li ...

  4. 数码管动态显示——74HC04

    1.电路设计: p0实现段选,p2实现位选,74hc04是反相器,有反向和放大的双重作用. 2.程序设计: #include<reg52.h> code unsigned char sev ...

  5. 16、job触发流程原理剖析与源码分析

    一.以Wordcount为例来分析 1.Wordcount val lines = sc.textFile() val words = lines.flatMap(line => line.sp ...

  6. Pyspark 最近使用的一些有趣姿势的梳理

    之前对 SQL 还是不是非常熟悉的,但是现在或多或少还是会写一些计算任务.比如最近在推送将所有天级的耗时任务都从传统关系型数据库迁移至 Spark 集群当中进行计算,中间遇到一些有趣的小问题在这里记录 ...

  7. LeetCode之找零钱

    题目:已知不同面值的钞票,求如 何用最少数量的钞票组成某个金额,求可 以使用的最少钞票数量.如果任意数量的已知面值钞票都无法组成该金额, 则返回-1. 示例: Input: coins = [1, 2 ...

  8. mac安装gmpy2

    brew install libmpc brew install mpfr pip install gmpy2

  9. 12.linux上Apache虚拟主机的建立和https协议网站建立

    一.Apache虚拟主机的建立   虚拟web主机 在同一台服务器上建立多个web站点,每个站点不独占用一台真正的服务器       1.建立dns解析 两个域名同一个ip               ...

  10. csapp网络编程初学笔记

    csapp网络编程初学笔记 客户端-服务器编程模型 每个网络应用都是基于客户端-服务器模型,服务器管理某种资源,并且通过操作来为它的客户提供某种服务 客户端-服务器模型中的基本操作是transacti ...