单层感知器python_深度学习之单层感知器(一)

当我们最初学习机器学习时候,了解到最简单的神经网络可能便是单层感知器,他也是监督学习的最简单一种。本文章就通过《人工神经网络理论、设计及应用》书中介绍的单层感知器一节,进行python的代码实现。

单层感知器的网络结构如下:

上图便是一个单层感知器,很简单的一个结构,图中说明我们有个3维的输入值分别是x1、x2、x3,输入端和其上的权值0.3相乘,然后将乘积相加后,最后通过激活函数对乘积和进行处理得到输出值y。

感知器学习算法:

采用感知器学习规则(对误差平方求导推极值问题),考虑到训练过程是感知器权值随每一步调整改变的过程,为此用t表示学习的迭代次数,权值看作t的函数。t=0表示学习开始前的初始状态,此时对应的权值为初始化值。训练可按如下步骤进行:

(1)、对各权值

(m为计算层的节点数)赋予较小的非零随机数;

(2)、输入样本对 {

} ,x是训练样本,d是样本的目标值;

(3)、计算各节点的实际输出

(t) = sgn[

(t)

] , j =1 ,2 ...... m;

(4)、调整各节点的权值

(t+1) =

+

[

]

,j=1,2......m;其中

为学习率,用于控制调整速度,学习率太大会影响训练的稳定性,太小则使训练的收敛速度变慢,一般取值范围0<

1;

(5)、返回到步骤2输入下一对样本

好了,有了上面的基本知识后,我们通过简单的python代码来实现单层感知网络。比如我们有如下图的例子:

首先建立数据集

import numpy as np

#建立数据集

x = np.mat([[1,0,0],[1,0,1],[1,1,0],[1,1,1],[0,0,1],[0,1,0],[0,1,1],[0,0,0]])

y = np.mat([[-1],[1],[1],[1],[-1],[-1],[1],[-1],])

#设置初始权值和偏置值

w = np.mat([0.3,0.3,0.3])

baise = 0.4

#学习率

rate = 0.01

#激活函数

def sgn(x):

return np.where(x >= 0.0, 1, -1)

#通过学习规则,进行迭代

for i in range(1000):

#误差计算

errors = 0

for j in range(len(x)):

#误差计算

r = rate*(y[j] - sgn(x[j]*w.T+baise))

#r = rate*(y[j] - (x[j]*w.T+baise))

#调整权值

w += r*x[j]

baise += r

#误差计算

errors += abs(r)

print(i,' iter :error is ', errors)

if errors ==0:

break

下图,是我运行上面程序的结果,可以看到迭代了8次后,误差为0:

通过计算出来的权值W和偏置值baise进行验证模型是否正确:

sgn(x*w.T+baise)

可以看到模型的输出和实际y的值一模一样:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值