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中的__init__和__new__
Mar 12 Python
Python中的数据对象持久化存储模块pickle的使用示例
Mar 03 Python
python BlockingScheduler定时任务及其他方式的实现
Sep 19 Python
使用python实现kNN分类算法
Oct 16 Python
python 协程 gevent原理与用法分析
Nov 22 Python
python随机生成大小写字母数字混合密码(仅20行代码)
Feb 01 Python
python中使用input()函数获取用户输入值方式
May 03 Python
python实现图像外边界跟踪操作
Jul 13 Python
python中xlrd模块的使用详解
Feb 01 Python
用Python提取PDF表格的方法
Apr 11 Python
python opencv旋转图片的使用方法
Jun 04 Python
Pillow图像处理库安装及使用
Apr 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
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
PHP学习笔记之数组篇
2011/06/28 PHP
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
PHP中使用OpenSSL生成证书及加密解密
2017/02/05 PHP
jQuery $.each的用法说明
2010/03/22 Javascript
读jQuery之十 事件模块概述
2011/06/27 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
轻量级javascript 框架Backbone使用指南
2015/07/24 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
2019/12/04 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
Python数据类型详解(四)字典:dict
2016/05/12 Python
Python3之简单搭建自带服务器的实例讲解
2018/06/04 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
Win8下python3.5.1安装教程
2020/07/29 Python
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
python3实现猜数字游戏
2020/12/07 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
python解析多层json操作示例
2019/12/30 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
2020/11/28 Python
python FTP编程基础入门
2021/02/27 Python
师说教学反思
2014/02/07 职场文书
小学毕业感言300字
2014/02/19 职场文书
竞聘自述材料
2014/08/25 职场文书
争先创优活动总结
2014/08/27 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
汽车转让协议书范本
2014/12/07 职场文书
研讨会通知
2015/04/27 职场文书
2016年“世界气象日”广播稿
2015/12/17 职场文书
个人的事迹材料怎么写
2019/04/24 职场文书
文书工作总结(范文)
2019/07/11 职场文书
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers