python实现感知器


Posted in Python onDecember 19, 2017

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

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

python实现感知器

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

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

python实现感知器

输出为:

python实现感知器

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

所谓异或操作:

python实现感知器

二维分布图为:

python实现感知器

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

对于and操作:

python实现感知器

对应的二维分布图为:

python实现感知器

感知器的训练 

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

1.将权重初始化为 0 或一个很小的随机数
2.对于每个训练样本 x(i) 执行下列步骤: 

   计算输出值 y^.

   更新权重

python实现感知器

其中python实现感知器

下面用感知器实现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 相关文章推荐
python 将字符串转换成字典dict
Mar 24 Python
Python写入CSV文件的方法
Jul 08 Python
Python3.6正式版新特性预览
Dec 15 Python
python实现装饰器、描述符
Feb 28 Python
python针对excel的操作技巧
Mar 13 Python
用python处理MS Word的实例讲解
May 08 Python
Python3.5面向对象程序设计之类的继承和多态详解
Apr 24 Python
python实现超市商品销售管理系统
Nov 22 Python
python路径的写法及目录的获取方式
Dec 26 Python
django列表筛选功能的实现代码
Mar 27 Python
基于Python实现2种反转链表方法代码实例
Jul 06 Python
Django限制API访问频率常用方法解析
Oct 12 Python
python绘制简单折线图代码示例
Dec 19 #Python
matplotlib设置legend图例代码示例
Dec 19 #Python
matplotlib中legend位置调整解析
Dec 19 #Python
python实现感知器算法详解
Dec 19 #Python
python绘制条形图方法代码详解
Dec 19 #Python
Python实现两款计算器功能示例
Dec 19 #Python
Python构建网页爬虫原理分析
Dec 19 #Python
You might like
ThinkPHP文件上传实例教程
2014/08/22 PHP
Array.prototype 的泛型应用分析
2010/04/30 Javascript
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
Vue中props的使用详解
2018/06/15 Javascript
玩转vue的slot内容分发
2018/09/22 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
pymssql ntext字段调用问题解决方法
2008/12/17 Python
python实现socket端口重定向示例
2014/02/10 Python
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
Python实现批量下载文件
2015/05/17 Python
Python中几个比较常见的名词解释
2015/07/04 Python
Python对象属性自动更新操作示例
2018/06/15 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
python实现键盘控制鼠标移动
2020/11/27 Python
浅谈Pandas:Series和DataFrame间的算术元素
2018/12/22 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
2019/03/20 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
CLR与IL分别是什么含义
2016/08/23 面试题
《月亮湾》教学反思
2014/04/14 职场文书
大学生工作自荐书
2014/06/16 职场文书
行政求职信
2014/07/04 职场文书
同学聚会感言一句话
2015/07/30 职场文书
护士工作心得体会
2016/01/25 职场文书
商业计划书如何写?关键问题有哪些?
2019/07/11 职场文书
基于Go Int转string几种方式性能测试
2021/04/28 Golang
Java SSH 秘钥连接mysql数据库的方法
2021/06/28 Java/Android