感知器及其在python中的实现_python实现感知器

上篇博客转载了关于感知器的用法,遂这篇做个大概总结,并实现一个简单的感知器,也为了加深自己的理解。

感知器是最简单的神经网络,只有一层。感知器是模拟生物神经元行为的机器。感知器的模型如下:

给定一个n维的输入 ,其中w和b是参数,w为权重,每一个输入对应一个权值,b为偏置项,需要从数据中训练得到。

激活函数 感知器的激活函数可以有很多选择,比如我们可以选择下面这个阶跃函数f来作为激活函数:

输出为:

事实上感知器可以拟合任何线性函数,任何线性分类或线性回归的问题都可以用感知器来解决。但是感知器不能实现异或运算,当然所有的线性分类器都不可能实现异或操作。

所谓异或操作:

二维分布图为:

对于上图,我们找不到一条直线可以将0,1类分开。对于and操作,感知器可以实现,我们可以找到一条直线把其分为两部分。。

对于and操作:

对应的二维分布图为:

感知器的训练

首先将权重w和 偏置b随机初始化为一个很小的数,然后在训练中不断更新w和b的值。

1.将权重初始化为 0 或一个很小的随机数

2.对于每个训练样本 x(i) 执行下列步骤:

计算输出值 y^.

更新权重

其中

下面用感知器实现and操作,具体代码如下:

# -*- coding: utf-8 -*-

# python 3.4

import numpy as np

from random import choice

from sklearn import cross_validation

from sklearn.linear_model import LogisticRegression

'''''

1.将权重初始化为 0 或一个很小的随机数

2.对于每个训练样本 x(i) 执行下列步骤:

计算输出值 y^.

更新权重

'''

def load_data():

input_data=[[1,1], [0,0], [1,0], [0,1]]

labels=[1,0,0,0]

return input_data,labels

def train_pre(input_data,y,iteration,rate):

#===========================

'''''

参数:

input_data:输入数据

y:标签列表

iteration:训练轮数

rate:学习率

'''

#============================

unit_step = lambda x: 0 if x < 0 else 1

w=np.random.rand(len(input_data[0]))#随机生成[0,1)之间,作为初始化w

bias=0.0#偏置

for i in range(iteration):

samples= zip(input_data,y)

for (input_i,label) in samples:#对每一组样本

#计算f(w*xi+b),此时x有两个

result=input_i*w+bias

result=float(sum(result))

y_pred=float(unit_step(result))#计算输出值 y^

w=w+rate*(label-y_pred)*np.array(input_i)#更新权重

bias=rate*(label-y_pred)#更新bias

return w,bias

def predict(input_i,w,b):

unit_step = lambda x: 0 if x < 0 else 1#定义激活函数

result=result=result=input_i*w+b

result=sum(result)

y_pred=float(unit_step(result))

print(y_pred)

if __name__=='__main__':

input_data,y=load_data()

w,b=train_pre(input_data,y,20,0.01)

predict([1,1],w,b)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值