python实现感知器

 更新时间:2021年10月11日 16:43:59   作者:momaojia  
这篇文章主要为大家详细介绍了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) 

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

相关文章

  • 详解运行Python的神器Jupyter Notebook

    详解运行Python的神器Jupyter Notebook

    如果我们想要运行Python,就是在Python或者IPython的解释器环境中进行交互式运行,或者程序员最喜欢的编写.py文件,在文件中编写python代码,然后运行。如果想写一篇Python的文章,里面有代码,还希望代码在当前页面运行,那就是使用我们今天要介绍的Jupyter Notebook。
    2021-06-06
  • Python光学仿真实现波长与颜色之间对应关系示例解析

    Python光学仿真实现波长与颜色之间对应关系示例解析

    这篇文章主要为大家介绍了Python光学仿真实现波长与颜色之间对应关系的示例解析,有需要的我朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • Python队列RabbitMQ 使用方法实例记录

    Python队列RabbitMQ 使用方法实例记录

    这篇文章主要介绍了Python队列RabbitMQ 使用方法,结合实例形式分析了Python队列RabbitMQ创建队列发送消息与创建消费者消费信息相关操作技巧,需要的朋友可以参考下
    2019-08-08
  • 使用Python对微信好友进行数据分析

    使用Python对微信好友进行数据分析

    这篇文章主要介绍了使用Python对微信好友进行数据分析的实现代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • python中List添加与删除元素的几种方法实例

    python中List添加与删除元素的几种方法实例

    列表基本上是 Python 中最常用的数据结构之一了,并且删除操作也是经常使用的,下面这篇文章主要给大家介绍了关于python中List添加与删除元素的相关资料,需要的朋友可以参考下
    2022-09-09
  • 一文轻松了解Python中类的继承

    一文轻松了解Python中类的继承

    类的继承可以看成对类的属性和方法的重用,能够大大的减少代码量,下面这篇文章主要给大家介绍了关于Python中类的继承的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • python pandas dataframe 按列或者按行合并的方法

    python pandas dataframe 按列或者按行合并的方法

    下面小编就为大家分享一篇python pandas dataframe 按列或者按行合并的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • 使用Python编写提取日志中的中文的脚本的方法

    使用Python编写提取日志中的中文的脚本的方法

    这篇文章主要介绍了使用Python编写提取日志中的中文的脚本的方法,该脚本包括过滤重复的字符行等功能,需要的朋友可以参考下
    2015-04-04
  • python上下文管理器异常问题解决方法

    python上下文管理器异常问题解决方法

    在本篇文章里小编给大家整理的是一篇关于python上下文管理器异常问题解决方法,对此有兴趣的朋友们可以学习参考下。
    2021-02-02
  • Python 数据分析教程探索性数据分析

    Python 数据分析教程探索性数据分析

    这篇文章主要介绍了Python 数据分析教程探索性数据分析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08

最新评论