python实现BP算法
误差逆传播算法,又称BP算法,被誉为神经网络中最好的算法,其广泛应用在多层网络中。
在这之前,我们先来理解几个概念
M-P神经元模型
所谓M-P模型,其实是按照生物神经元的结构和工作原理构造出来的一个抽象和简化了的模型。
对于第 j 个神经元,接受多个其它神经元的输入信号xi 。各突触强度以实系数w表示,这是第i个神经元对第 j 个神经元作用的加权值。
多层神经网络结构
学习率
import pandas as pd
import numpy as np
def sigmoid(x):return 1/(1+np.exp(-x))def BP(x_train, y_train, numb, inta): # x_train,y_train表示训练集,numb表示隐层神经元的个数,inta表示学习率# print('x_train:',x_train)# print('y_train:',y_train)v = np.matrix(np.random.rand(len(x_train.T), numb)) # 随机生成输入层神经元与隐层神经元之间的连接权# print('v:',v)w = np.matrix(np.random.rand(numb, len(y_train.T))) # 随机生成隐层神经元与输出层神经元之间的连接权# print('w:',w)thita = np.matrix(np.random.rand(len(y_train.T))) # 输出神经元的阈值# print("thita:",thita)garma = np.matrix(np.random.rand(numb)) # 输出神经元的阈值# print("garma:",garma)temp = 0for i in range(len(x_train)):alpha = x_train[i].dot(v) # 隐层神经元的输入# print('alpha',alpha)b = sigmoid(alpha) # 隐层神经元的输出# print('b',b)beta = b.dot(w) # 输出神经元的输入# print('beta',beta)y_estimate = sigmoid(beta - thita) # 求出y的估计值# print('y_estimate',y_estimate)g = y_estimate.dot((1 - y_estimate).T).dot(y_train[i] - y_estimate) # 输出层神经元的梯度# print('g',g)e = b.dot((1 - b).T).dot(g).dot(w.T) # 隐层神经元的梯度# print('e',e)E = 1 / 2 * (y_estimate - y_train[i]).dot((y_estimate - y_train[i]).T) # 均方误差# print('E',E)if E > temp: # 更新连接权和阈值w = w + inta * (b.T).dot(g)# print('w',w)thita = thita - inta * g# print('thita',thita)v = v + inta * (x_train[i].T).dot(e)# print('v',v)garma = garma - inta * e # 隐层神经元的阈值# print('garma',garma)temp = Ereturn w, v, thita, garmax=np.matrix(np.random.rand(3,4)) #输入层:随机生成3个样本,每个样本有4个神经元
y=np.matrix(np.random.rand(3,2)) #输出层:随机生成3个样本,每个样本有2个神经元
print('x',x)
print('y',y)w,v,thita,garma=BP(x,y,4,0.01)#这里我假设隐层有4个神经元,学习率为0.01
print('w',w)
print('v',v)
print('thita',thita)
print('garma',garma)
python实现BP算法相关推荐
- 【机器学习基础】使用python实现BP算法
用pytorch跟tensorflow实现神经网络固然爽.但是想要深入学习神经网络,光学会调包是不够的,还是得亲自动手去实现一个神经网络,才能更好去理解. 一.问题介绍 传说中线性分类器无法解决的异或 ...
- 机器学习——人工神经网络之BP算法编程(python二分类数据集:马疝病数据集)
目录 一.理论知识回顾 1.神经网络模型 2.明确任务以及参数 1)待估参数: 2)超参数: 3)任务 3.神经网络数学模型定义 1)激活函数 2)各层权重.阈值定义 3)各层输入输出定义 4.优 ...
- python bp神经网络 异或_【神经网络】BP算法解决XOR异或问题MATLAB版
第一种 %% %用神经网络解决异或问题 clear clc close ms=4;%设置4个样本 a=[0 0;0 1;1 0;1 1];%设置输入向量 y=[0,1,1,0];%设置输出向量 n=2 ...
- Python 实现 周志华 《机器学习》 BP算法
习题5.5: 试编程实现标准BP算法和累积BP算法,在西瓜数据集3.0上分别用这两个算法训练一个单隐层网络,并进行比较 算法的主要思想来自周志华<机器学习>上讲BP算法的部分,实现了书上介 ...
- Python 实现 周志华 《机器学习》 BP算法(高级版)
习题5.5: 试编程实现标准BP算法和累积BP算法,在西瓜数据集3.0上分别用这两个算法训练一个单隐层网络,并进行比较 算法的主要思想来自周志华<机器学习>上讲BP算法的部分,实现了书上介 ...
- 根据《机器学习》(周志华)第五章内容,用Python实现标准BP算法
BP神经网络由一层输入层.任意隐层(一般为1).一层输出层组成.假定输入向量为n维向量,即输入神经元数量为n,隐层的层数为num,每一层隐层的神经元数量为eachCount,输出向量为yCount维向 ...
- 标准BP算法、累积BP算法Python实现
标准BP,累积BP算法原理及MATLAB自编写实现在这里 以下是自己编写的Python的代码,欢迎指正 标准BP算法: import numpy as npx=np.matrix(np.random. ...
- 反向传播(BP算法)python实现
反向传播(BP算法)python实现 1.BP算法描述 BP算法就是反向传播,要输入的数据经过一个前向传播会得到一个输出,但是由于权重的原因,所以其输出会和你想要的输出有差距,这个时候就需要进行反向传 ...
- 神经网络——Python实现BP神经网络算法(理论+例子+程序)
一.基于BP算法的多层感知器模型 采用BP算法的多层感知器是至今为止应用最广泛的神经网络,在多层感知器的应用中,以图3-15所示的单隐层网络的应用最为普遍.一般习惯将单隐层前馈网称为三层感知器,所谓三 ...
最新文章
- java超级点击器是怎么实现的_超萌新级的Java学习心得——简单监听器
- HDU ACM 1065 I Think I Need a Houseboat
- 计算机丢失cv210.dll,cv210.dll文件免费版
- python中字符串运算符及用法_python将字符串转换为运算符
- 递归删除目录下.svn文件
- postgres 错误duplicate key value violates unique constraint 解决方案
- Packet Tracer 5.0 建构 CCNA 实验攻略——配置单区域 OSPF
- 技术人员如何跟传统行业打交道?
- Python 为什么要用线程池?
- 面向对面 静态参数 与 组合
- 创建和销毁对象(1)
- 数据结构--严蔚敏(C语言版)笔记
- .net源码解读之StringBuilder
- qq音速显示服务器断开,《QQ音速》常见问题问答汇总
- Vue 事件修饰符(stop、prevent、self、capture、once、passive)
- 三层交换机与路由器的区别
- 计网 | 链路层协议及大题解构
- 魔兽争霸的历史(ZT)第一章
- word中如何设置页码从任意页开始算起(图文版)
- 淘宝店铺后台接入阿奇索第三方平台订单推送功能,详细步骤和注意事项