我们知道,感知器是最简单的神经网络,只有一层。感知器是模拟生物神经元行为的机器。那么这次给大家带来的教学就是如何用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)
登录后复制



相信看了这些案例你已经掌握了方法,更多精彩请关注Work网其它相关文章!

相关阅读:

php如何实现栈数据结构以及括号匹配算法的代码示例详解

php中最简单的字符串匹配算法,php匹配算法_PHP教程

最简单的php中字符串匹配算法教程

以上就是如何用python来实现感知器的详细内容,更多请关注Work网其它相关文章!

09-06 07:15