MLP多层感知器+BP算法原理及实战
多层感知器是在感知器的基础上多元化,原来只是用一个感知器,但是单个感知器因为是单输出,所以只能进行二分类的操作,他并不能进行类似异或问题的求解,再次基础上前辈们提出了多层感知器。
如上图所示,{a11,a12,a13}所代表的是第一层的神经元,{a21,a22}所代表的是第二层的神经元,图中的w代表的是权重。
与单层感知器不同的是这里在前层神经元权重求和后,还有进行一次非线性激活函数激活,最后得到的就是该神经元的值。
如上所示,其中f就是其中的激活函数,激活函数有类似sigmoid函数、tanh函数以及ReLU函数和它的改进Leaky ReLu函数。
MLP多层感知器算法的前馈部分就是这一步,以次遍历到最后的输出。
到此为止为前馈操作,接下来是反馈操作,前馈和反馈之间还存在一个损失函数。
此处损失函数代表的是目标值和结果值之间的差距多大。所以反馈操作的目的就是减小该损失函数的结果值。
根据刚才的神经网络图,进行改进。
根据链式求导法则
在这里我们把激活函数定义为sigmoid函数。
在这里可以看出,sigmoid函数f(z)的导数是f(z)*(1-f(z))
这就可以得出从输出层到隐藏层的导数,
从隐藏层到输入层:
(连式求导)
同理可得出别的导数。
然后用所求出的导数去更新权重。
用MLP多层感知器算法求解异或问题。
import numpy as np
import matplotlib.pyplot as pltrate=0.1 #学习率
sample_num=4 #样本数据量class my_mlp:def __init__(self, input_size, hidden_size, output_size):self.w1 = np.random.normal(size=(hidden_size, input_size))#输入层到隐藏层self.w2 = np.random.normal(size=(hidden_size,output_size))#隐藏层到输出层self.b1 = np.random.normal(size=(hidden_size))self.b2 = np.random.normal(size=(output_size))self.h_out = np.zeros(1)self.out = np.zeros(1)@staticmethoddef sigmoid(x):'''sigmoid函数作为激活函数'''return 1 / (1 + np.exp(-x))@staticmethoddef d_sigmoid(x):'''相对误差对输出和隐含层求导'''return x * (1 - x)def forward(self,input):self.h_out = my_mlp.sigmoid(np.dot(input, self.w1)+self.b1)self.out = my_mlp.sigmoid(np.dot(self.h_out, self.w2)+self.b2)def backpropagation(self,input,output,lr=rate):self.forward(input)L2_delta=(output-self.out) * my_mlp.d_sigmoid(self.out)L1_delta = L2_delta.dot(self.w2.T) * my_mlp.d_sigmoid(self.h_out)d_w2 = rate * self.h_out.T.dot(L2_delta)d_w1 = rate * input.T.dot(L1_delta)self.w2 += d_w2self.w1 += d_w1d_b2 = np.ones((1,sample_num)).dot(L2_delta)d_b1 = np.ones((1,sample_num)).dot(L1_delta)self.b2 += rate*d_b2.reshape(d_b2.shape[0]*d_b2.shape[1],)self.b1 += rate*d_b1.reshape(d_b1.shape[0]*d_b1.shape[1],)if __name__ == '__main__':mlp=my_mlp(2,2,1)# x_data x1,x2x_data = np.array([[0, 0],[0, 1],[1, 0],[1, 1]])# y_data labely_data = np.array([[0],[1],[1],[0]])for i in range(15000):mlp.backpropagation(x_data,y_data)out=mlp.out # 更新权值if i % 500 == 0:plt.scatter(i, np.mean(np.abs(y_data - out)))#print('当前误差:',np.mean(np.abs(y_data - out)))plt.title('Error Curve')plt.xlabel('iteration')plt.ylabel('Error')plt.show()print('输入层到隐含层权值:\n',mlp.w1)print('输入层到隐含层偏置:\n',mlp.b1)print('隐含层到输出层权值:\n',mlp.w2)print('隐含层到输出层偏置:\n',mlp.b2)print('输出结果:\n',out)print('忽略误差近似输出:')for i in out:print(0 if i<=0.5 else 1)
结果:
MLP多层感知器+BP算法原理及实战相关推荐
- 深度学习02-神经网络(MLP多层感知器)
文章目录 神经网络 简介 学习路径 分类 多层感知器(MLP) 神经网络认识 两层神经网络 输入层 从输入层到隐藏层 从隐藏层到输出层 激活层 输出的正规化 如何衡量输出的好坏 反向传播与参数优化 过 ...
- MLPclassifier,MLP 多层感知器的的缩写(Multi-layer Perceptron)
先看代码(sklearn的示例代码): [python] view plain copy from sklearn.neural_network import MLPClassifier X = [[ ...
- 使用pytorch搭建MLP多层感知器分类网络判断LOL比赛胜负
使用pytorch搭建MLP多层感知器分类网络判断LOL比赛胜负 1. 数据集 百度网盘链接,提取码:q79p 数据集文件格式为CSV.数据集包含了大约5万场英雄联盟钻石排位赛前15分钟的数据集合,总 ...
- SkLearn之MLP(多层感知器)
Multi-layer Perceptron即多层感知器,也就是神经网络,要说它的Hello world,莫过于识别手写数字了.如果你已经了解它的原理并尝试过自己写一个后就可以试用下通用的类库,好将来 ...
- 20、21_链式法则、MLP(多层感知器模型)反向传播
1.17.链式法则 x经过参数w1和b1得到y1ÿ
- 使用多层感知器进行图片分类
文章目录 实验目标 实验要求 实验原理 实验步骤 实验分析 源代码 实验目标 多层感知器(Multi-Layer Perceptron,MLP)也叫人工神经网络(Artificial Neural N ...
- TensorFlow 多层感知器
本文主要介绍使用TensorFlow对多层感知器(MLP)进行编程,其他内容参考:TensorFlow 学习目录. 目录 一.多层感知器MLP 一.多层感知器MLP 多层感知器不同于CNN,CNN提取 ...
- MP模型、单层感知器、多层感知器的理解
神经网络基础 序言 MP模型 1.逻辑与: 2.逻辑或: 3.逻辑异或: 单层感知器 多层感知器(BP) 序言 关于神经网络的内容已经学习了很多,也发现了一些问题,而这些问题是因为基础不牢靠引起的,所 ...
- 深度学习笔记--多层感知器以及BP算法
简介 多层感知器,是指包含1个或多个隐层的前馈神经网络. 前馈神经网络的特点: 第0层为输入层,最后一层为输出层,中间层为隐层. 整个网络无反馈,信号从输入层向输出层单向传播,整个网络为有向无环图. ...
最新文章
- 695.岛屿的最大面积
- 在Linux上部署aspnet mvc3
- 小样本点云深度学习库_2019-01-07-小样本深度学习
- Python桌面图形程序美化的方法论
- 计算机视觉摔倒检测,基于计算机视觉的室内跌倒检测
- 电影编码JPEG2000与H.264
- python分支语句_Python中的分支语句和循环语句及案例
- HttpRuntime.Cache的使用经验
- sqlalchemy_外键连接表
- Hive总结(十二)Hive查询进阶
- Kettle下载与安装
- PHP - Smarty模板引擎 - Download下载 - 2.6.22
- IO编程 之 缓冲篇
- Python 实现 批量 复制指定PDF文件 到指定文件夹并批量打印出来
- Warshall‘s algorithm 算法的实现及优化
- SMS注册与接收短信
- jmeter压测学习47-发soap请求测试webservice接口
- 网络通信TCP/UDP
- 水下超声波测距c语言程序,51单片机超声波测距C程序
- Shell学习(12)文件操作
热门文章
- 74HC595 8位移位寄存器介绍
- 使用SMTP协议命令行发送邮件
- oracle 速度最快 驱动,c# – Oracle ODP.NET托管驱动程序在64位运行速度比在32位运行速度慢50-100%...
- C#重写RichBox控件获取RTF格式的内容
- 关于orientation
- Unity实战篇 | 接入 声网SDK 实现 音频通话 —— 自己动手做一个 语音聊天房
- 百度地图离线开发demo-海量数据绘制
- 你从未见过的,最全微服务架构实战详解,干货满满!
- Glade实现计算器
- 微信小程序 radio选中样式改为实心圆<转载>