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线程详解
Jun 24 Python
Python实现翻转数组功能示例
Jan 12 Python
Flask框架Jinjia模板常用语法总结
Jul 19 Python
python3 unicode列表转换为中文的实例
Oct 26 Python
将pip源更换到国内镜像的详细步骤
Apr 07 Python
python实现按行分割文件
Jul 22 Python
python pycharm的安装及其使用
Oct 11 Python
Python字符串的修改方法实例
Dec 19 Python
Pytorch .pth权重文件的使用解析
Feb 14 Python
Tensorflow中的dropout的使用方法
Mar 13 Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
Apr 14 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之数组学习
2011/05/29 PHP
基于PHP异步执行的常用方式详解
2013/06/03 PHP
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
如何解决PHP无法实现多线程的问题
2015/09/25 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
PHP下载远程图片并保存到本地方法总结
2016/01/22 PHP
php策略模式简单示例分析【区别于工厂模式】
2019/09/25 PHP
PHP如何获取Cookie并实现模拟登录
2020/07/16 PHP
Javascript打印网页部分内容的脚本
2008/11/17 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
从零学JS之你需要了解的几本书
2014/05/19 Javascript
JS实现根据当前文字选择返回被选中的文字
2014/05/21 Javascript
Node.js插件的正确编写方式
2014/08/03 Javascript
javascript模拟实现ajax加载框实例
2014/10/15 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
2015/01/09 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
2016/10/27 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
Python中的descriptor描述器简明使用指南
2016/06/02 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
2019/05/31 Python
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
人力资源主管的岗位职责
2014/03/15 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
Java 在线考试云平台的实现
2021/11/23 Java/Android
Python+Pillow+Pytesseract实现验证码识别
2022/05/11 Python