1.原理

1.1单层感知机的第一种表达形式

图为感知器的结构

现在其中的数学符号做如下解释:

为输入信号。的权值。

 表示细胞的输入信号在细胞核的位置进行汇总

b被称为偏置值,相当于神经元内部自带的信号。

f(x)称为激活函数,理解为信号在轴突上进行的线性或非线性变化。在单层感知器中最开始使用的激活函数是sign(x)激活函数。该函数的特点是当x>0时,输出值为1;当x=0时,输出值为0;当x<0时,输出值为-1。函数如下图所示

1.2 单层感知机的另一种表达形式

即将b看作,且恒为1,原理和第一种形式相似,这里不再赘述

1.3 感知器的学习规则

这是现在感知机的表达式

我们使用来对参数进行跟新

Δwi表示第i个权值的变化,η表示学习率,;t是正确的标签(Target)。

因为单层感知器的激活函数为sign函数,所以t和y的取值都为±1。

这里举一个计算的实例(采用第二种感知机的表达式):

=1 =0 =-1 =-5 =0 =0 学习率=1 正确的标签t=1

我们采用代码完成感知器的学习:

1.数据准备

lr是指学习率

t是真实值

import numpy as np
x_0 = 1
x_1 = 0
x_2 = -1
w_0 = -5
w_1 = 0
w_2 = 0
t=1
lr = 1

2.模型算法

for i in range(100):y=np.sign(w_0*x_0+w_1*x_1+w_2*x_2)print("y:",y)if y!=t:w_0=w_0-lr*(y-t)*x_0w_1=w_1-lr*(y-t)*x_1w_2=w_2-lr*(y-t)*x_2print(w_0,w_1,w_2)else:break

代码运行结果如下:

y: -1
-3 0 -2
y: -1
-1 0 -4
y: 1

最后更新之后的参数是 w_0 = -1,w_1 = 0, w_2=-4

3.也可以使用矩阵来做简单的感知机算法来实现运行效率:

import numpy as np
X=np.array([[1,0,-1]])
np.transpose(X)
W=np.array([[-5],[0],[0]])
t=1
lr=1
for i in range(100):y=np.sign(np.dot(X,W))print("y:",y)if y!=t:W=W+lr*(t-y)*X.Tprint(W)else:break
y: [[-1]]
[[-3][ 0][-2]]
y: [[-1]]
[[-1][ 0][-4]]
y: [[1]]

运行成功

4.学习率

(1)学习率η的取值范围一般为0~1;

(2)学习率太大,容易造成权值调整不稳定;

(3)学习率太小,模型参数调整太慢,迭代次数太多。

5.模型的收敛条件

(1)loss小于某个预先设定的较小的值;

(2)两次迭代之间权值的变化已经很小了;

(3)设定最大迭代次数,当迭代次数超过最大迭代次数时停止。

6.模型的超参数和参数的区别

 (1)前面提到的权值和偏置值则是参数

(2)学习率和迭代次数是人为设置的超参数

1.4 单层感知器解决分类问题

假设我们有四个二维的数据(3,3),(4,3),(1,1),(2,1)。

(3,3)和(4,3)这两个数据的标签为1,(1,1)和(2,1)这两个数据的标签为-1

我们通过此数据来构建单层感知机分类器。

我们通过单层感知器的第二种表达式来进行数据的修改

数据修改成为1,3,3),(1,4,3),(1,1,1),(1,2,1)

对应标签还是(1,1,-1,-1)

初始化权值w1,w2,w3:取0~1的随机数

学习率:取0.1

激活函数:np.sign

我们构建感知机的代码如下:

1.导包

import numpy as np
import matplotlib.pyplot as plt

2.生成数据

X=np.array([[1,3,3],[1,4,3],[1,1,1],[1,2,1]])
T=np.array([[1],[1],[-1],[-1]])
W = np.random.random([3,1])
lr =0.1
Y=0

X为样本点

T为真实的目标值

W为初始化的参数值取0-1的随机值

学习率为lr=0.1

Y为神经网络的初始化输出Y=0

for i in range(100):Y=np.sign(np.dot(X,W))

先得到Y的预测值

for i in range(50):Y=np.sign(np.dot(X,W))print("Y:",Y)E = T - Y

对参数进行跟新

    delta_W = lr*(np.dot(X.T,E))/X.shape[0]W=W+delta_W
    if(Y==T).all():print("Finished")break

当预测值全部等于真实值的时候停止跟新,函数收敛

x_1=[3,4]
y_1=[3,3]
x_2=[1,2]
y_2=[1,1]
k = -W[1]/W[2]
d = -W[0]/W[2]
xdata=(0,5)
plt.plot(xdata,xdata*k+d,'r')
plt.scatter(x_1,y_1,c='b')
plt.scatter(x_2,y_2,c='y')
plt.show()

得到结果如图所示

单层感知器的原理及代码实现相关推荐

  1. 为什么在反向传播中感知器初始值不能为0_深度学习理论分享之——单层感知器简述...

    1单层感知器概述单层感知器(Single Layer Perceptron)是最简单的神经网络.它包含输入层和输出层,而输入层和输出层是直接相连的.单层感知器属于感知器中最简单的一种分类器,属于机器学 ...

  2. 深度学习入门之感知器(原理+代码)

    感知器的原理:感知器的原理相当简单,当线性可分的时候就是中学的时候学过的y=kx+b,只不过中学的时候k和b都是给出的,给我们x让我们去求y,看看y是在这条直线的上方还是下方.而现在没有给我们k和b, ...

  3. 单层感知器python_多层感知器背后的概念及Python实现

    机器学习正在成为数据科学中最具革命性的技术之一,它允许我们发现特征之间的非线性关系,并使用它来预测新的样本.机器学习中最简单的体例之一是多层感知器.在本文中,我将讨论多层感知器背后的概念,并向您展示如 ...

  4. 深度学习--TensorFlow (2)单层感知器2 -- 实现多数据分类

    目录 一.基础理论 前向传递(得到输出y) 反向传递(更新权重w) 二.实现多数据分类 1.设置初始参数 2.训练 3.画图 3-1.画点 3-2.画线段 总代码 一.基础理论 这里只写公式,更加详细 ...

  5. 深度学习--TensorFlow (1)单层感知器1 -- 实现单数据训练

    目录 一.基础理论 1.单词感知器介绍 2.单词感知器学习规则 前向传递(得到输出y) 反向传递(更新权重w) 二.实现单层感知器 1.初始参数设置 2.正向传播(得到输出y) 3. 反向传播(更新权 ...

  6. 单层感知器应用实例--坐标点的二分类模式分类

    坐标点的二分类用MATLAB代码实现 n=0.1;//学习率 w=[0,0,0]; P=[-9,1,-12,-4,0,5;15,-8,4,5,11,9]; d=[0,1,0,0,0,1]; P=[on ...

  7. 感知器算法原理详解及python实现

    感知器算法PLA 感知器算法是对一种分类学习机模型的称呼,属于有关机器学习的仿生学领域中的问题,由于无法实现非线性分类而下马.但"赏罚概念(reward-punishment concept ...

  8. 单层感知器python_感知器及其在Python中的实现

    本文涵盖以下主题: 什么是感知器?算法.Python实现.局限性. 什么是感知器? 生物神经元示意图 感知器的概念类似于大脑基本处理单元神经元的工作原理.神经元由许多由树突携带的输入信号.胞体和轴突携 ...

  9. 单层感知器线性分类、多层感知器非线性分类样例 调用matlab神经网络工具箱实现

    %给定样本输入向量P,目标输出向量T %net = newp(PR,S,TF,LF) %PR为输入矢量的取值范围的最大值和最小值 S为神经元的个数 TF为网络的传递函数 默认为hardlim LF为网 ...

  10. 深度学习(神经网络)[1]——单层感知器

    深度学习(神经网络)[1] -- 单层感知器 算法描述 python实现 示例运行结果 可视化 算法描述 最原始的神经网络模型,类似于神经网络中的单个神经元,该算法局限性也很大,只适用于解决线性可分的 ...

最新文章

  1. 【HDU6701】Make Rounddog Happy【权值线段树+双向单调队列】
  2. if you do applications
  3. PLSQL9.0下载及配置oracle,PLSQL登录时常见问题解决
  4. Jena增删改查java API
  5. 分区格式化并给用户设定配额
  6. React 16 Jest手动模拟(Manual Mocks)
  7. C语言字符5,c语言总览5:字符输入和输出
  8. Cards BZOJ 1004
  9. ad画板子的一些问题解答(持续更新)
  10. Navicat连接MySQL8.0版本时出现Client does not support authentication protocol requested by server;报错的问题解决办法
  11. Ubuntu OpenCV 自定义环境变量 pkg-config / PKGCONFIGPATH
  12. bzoj 2442: [Usaco2011 Open]修剪草坪(单调队列)
  13. mysql内部代码的优缺点
  14. zul ajax使用线程池
  15. Z-TEK USB转422接口问题 RS422接口常见使用注意事项
  16. EPSON机械手视觉操作手册
  17. SQL获取当前月份的第一天
  18. MCAL中ADC的配置
  19. EMI共模电感一般什么材质你知道吗
  20. [转]程序员成功之路 ——The road ahead for programmer(演讲稿)

热门文章

  1. as常用固定搭配_初中英语常用固定搭配
  2. 盘点14个因安全事故引咎辞职的高管领导
  3. PyS2:RDD编程基础(二)
  4. Cesium开发环境搭建的几种方法总结
  5. JavaCV图片和视频互转 视频添加文字
  6. 273. 整数转换英文表示
  7. Vue input 限制只能输入正整数、数字、英文、两个小数
  8. html给图片添加蒙版,如何使用ps给图片加蒙版 ps给图片添加蒙版的教程
  9. 自学网络 arp_ignore/arp_announce
  10. Pytorch测试模型的GFLOPs和Param大小