神经网络(单层感知器)
概念
单层感知器算法是神经网络算法中结构最简单的模型,作为一种线性分类器,可以高效快速地解决线性可分的问题。
设计的感知器结构如下:
感知器实例:
感知器的另一种结构:(去掉了b,改为一固定输入x0)
感知器学习规则:
学习率:一般取在0~1之间
学习率太大容易造成权值调整不稳定
学习率太小,权值调整太慢,迭代次数太多
模型收敛条件:误差小于预先设定的某个较小的值
两次迭代之间的权值变化很小
设定最大迭代次数,超过次数即停止
程序
分类问题
案例:假设平面坐标系上有四个点,(3,3),(4,3)这两个点的标签为1,(1,1),(0,2)这两个点的标签为-1,构建神经网络来分类。
思路:我们要分类的数据是2维数据,所以只需要2个输入节点,我们采用神经元(感知器)的第二种结构,把偏置当做一个节点,这样我们需要3个输入节点。
- 输入数据有4个(1,3,3),(1,4,3),(1,1,1),(1,0,2)
- 数据对应的标签为(1,1,-1,-1)
- 初始化权值w 0 ,w 1 ,w 2 取-1到1的随机数
- 学习率(learning rate)设置为0.11
- 激活函数为sign函数
第一步:导库 、初始化参数
import numpy as np
import matplotlib.pyplot as plt#输入数据
X = np.array([[1,3,3],[1,4,3],[1,1,1],[1,0,2]])
#标签
Y = np.array([[1],[1],[-1],[-1]])#m个输入,n个输出→m行n列
#权值初始化,3行1列,取值范围-1到1
W = (np.random.random([3,1])-0.5)*2print(W)
#学习率设置
lr = 0.11
#神经网络输出
O = 0
第二步:权值更新
def update():global X,Y,W,lrO = np.sign(np.dot(X,W)) # shape:(3,1)# /int(X.shape[0]) 这里是求误差平均值,防止累计误差太大W_C = lr*(X.T.dot(Y-O))/int(X.shape[0])W = W + W_C
第三步:训练
for i in range(100):update()#更新权值print(W)#打印当前权值print(i)#打印迭代次数O = np.sign(np.dot(X,W))#计算当前输出 if(O == Y).all(): #如果实际输出等于期望输出,模型收敛,循环结束print('Finished')print('epoch:',i)break#正样本
x1 = [3,4]
y1 = [3,3]
#负样本
x2 = [1,0]
y2 = [1,2]#计算分界线的斜率以及截距
k = -W[1]/W[2]
d = -W[0]/W[2]
print('k=',k)
print('d=',d)xdata = (0,5)plt.figure()
plt.plot(xdata,xdata*k+d,'r')
plt.scatter(x1,y1,c='b')
plt.scatter(x2,y2,c='y')
plt.show()
异或问题
异或:0^0 = 0;0^1 = 1;1^0 = 1;1^1 = 0
第一步:调库、初始化参数、权值更新
import numpy as np
import matplotlib.pyplot as plt#输入数据
X = np.array([[1,0,0],[1,0,1],[1,1,0], [1,1,1]])
#标签
Y = np.array([[-1],[1],[1],[-1]])#权值初始化,3行1列,取值范围-1到1
W = (np.random.random([3,1])-0.5)*2print(W)
#学习率设置
lr = 0.11
#神经网络输出
O = 0#权值更新
def update():global X,Y,W,lrO = np.sign(np.dot(X,W)) # shape:(3,1)W_C = lr*(X.T.dot(Y-O))/int(X.shape[0])W = W + W_C
第二步:训练
for i in range(100):update()#更新权值print(W)#打印当前权值print(i)#打印迭代次数O = np.sign(np.dot(X,W))#计算当前输出 if(O == Y).all(): #如果实际输出等于期望输出,模型收敛,循环结束print('Finished')print('epoch:',i)break#正样本
x1 = [0,1]
y1 = [1,0]
#负样本
x2 = [0,1]
y2 = [0,1]#计算分界线的斜率以及截距
k = -W[1]/W[2]
d = -W[0]/W[2]
print('k=',k)
print('d=',d)xdata = (-2,3)plt.figure()
plt.plot(xdata,xdata*k+d,'r')
plt.scatter(x1,y1,c='b')
plt.scatter(x2,y2,c='y')
plt.show()
这说明这是一个非线性问题,单层感知器并不能很好的解决这类非线性问题。
这是我学习 覃秉丰老师的《机器学习算法基础》的自学笔记,课程在B站中的地址为:机器学习算法基础-覃秉丰_哔哩哔哩_bilibili
神经网络(单层感知器)相关推荐
- 神经网络 | 单层感知器从0到1(附Python源代码)
===================================================== github:https://github.com/MichaelBeechan CSDN: ...
- 深度学习(神经网络)[1]——单层感知器
深度学习(神经网络)[1] -- 单层感知器 算法描述 python实现 示例运行结果 可视化 算法描述 最原始的神经网络模型,类似于神经网络中的单个神经元,该算法局限性也很大,只适用于解决线性可分的 ...
- 神经网络算法-论证单层感知器的局限性
神经网络算法-论证单层感知器的局限性 今天课上学习了一个思路 将真值表转换到平面直角坐标系中 来论证线性可分还是不可分,挺有意思记录一下. 简单感知器模型实际上仍然是MP模型的结构,但是它通过采用监督 ...
- 神经网络学习(1)————单层感知器以及python实现
一.感知器模型 单层感知器是感知器中最简单的一种,有单个神经元组成的单层感知器只能用于解决线性可分的二分性问题.在空间中如果输入的数据是可分的,感知器相当于将输入的数据在空间中分为两类,已经证明,如果 ...
- 单层感知器线性分类、多层感知器非线性分类样例 调用matlab神经网络工具箱实现
%给定样本输入向量P,目标输出向量T %net = newp(PR,S,TF,LF) %PR为输入矢量的取值范围的最大值和最小值 S为神经元的个数 TF为网络的传递函数 默认为hardlim LF为网 ...
- 神经网络 | 网络优化-线性神经网络-delta学习规则-梯度下降法(单层感知器-异或问题Python源代码)
===================================================== github:https://github.com/MichaelBeechan CSDN: ...
- 深度学习--TensorFlow (1)单层感知器1 -- 实现单数据训练
目录 一.基础理论 1.单词感知器介绍 2.单词感知器学习规则 前向传递(得到输出y) 反向传递(更新权重w) 二.实现单层感知器 1.初始参数设置 2.正向传播(得到输出y) 3. 反向传播(更新权 ...
- 人工神经网络:感知器
人工神经网络:感知器 1.1 基本概念 1.输入节点:X1={x1,x2,x3,...,xi,...xn},for example,X1=[1 2]'; 2.输出节点:y={y1,y2},for ex ...
- 如何利用 C# 实现神经网络的感知器模型?
前几天我们介绍了 如何利用 C# 对神经网络模型进行抽象,在这篇图文中,我们抽象了单个神经元 Neuro,网络层 Layer,网络结构 Network,激活函数 IActivationFunction ...
- 为什么在反向传播中感知器初始值不能为0_深度学习理论分享之——单层感知器简述...
1单层感知器概述单层感知器(Single Layer Perceptron)是最简单的神经网络.它包含输入层和输出层,而输入层和输出层是直接相连的.单层感知器属于感知器中最简单的一种分类器,属于机器学 ...
最新文章
- 你哪来这么多事(四):职工信息排序
- 在线作图|如何绘制一张好看相关性矩阵图
- oracle中rownum和row_number()
- 游戏使用html签名,关于玩游戏的个性签名
- 【LCT】魔法森林(P2387)
- guava缓存数据到本地_扩展Guava缓存以溢出到磁盘
- ajax脚本格式,jQuery ajax调用 - jim脚本响应是什么格式?
- python代码编辑工具pycharm的使用技巧
- Shiro系列-Authenticator和AuthenticationStrategy是什么
- Android知识点复习(一)-Android系统架构
- Linux查看JDK版本和安装位置
- 推荐几个下载英文原版电子书的网站-PDF
- Python运行报错most recent call last
- 关于学习的过程:痛并快乐着是一种收获
- Qt开发经验总结之武林秘籍
- 知网爬虫——爬取某个主题下的文章标题以及发表时间
- Ensight 操作技巧
- ros中自定义msg消息并用其他功能包调用
- 机器学习之R语言caret包trainControl函数(控制调参)
- linux 提取文件出错,pacman 错误:无法从 ××××获取文件 'core.db'