python实现感知器
作者:momaojia 发布时间:2021-03-18 09:12:13
标签: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)
来源:http://blog.csdn.net/momaojia/article/details/75127541


猜你喜欢
- 引言写这篇文章主要是周末休息太无聊,看了看别人代码,发现基本上要么是多协程下载文件要么就只有单协程的断点续传,所以就试了试有进度条的多协程下
- 单下划线与双下划线在 python 中,会看到 _xx, xx 以及 __xx 这样的变量或者函数名,在这里做一个简要的总结。_xx:保护(
- 本文实例为大家分享了答题辅助python具体代码,供大家参考,具体内容如下from screenshot import pull_scree
- 前言:目前在研究易信公众号,想给公众号增加一个获取个人交通违章的查询菜单,通过点击返回查询数据。以下是实施过程。一、首先,用火狐浏览器打开X
- --建递增序列CREATE SEQUENCE LZEAM_SP_LOOP_EQ_SEQ MINVALUE 1 INCREMENT BY 1
- 描述Python time time()返回当前时间的时间戳(1970 * 后经过的浮点秒数)。突然想看时间了,打开cmd发现脑中空荡,Jav
- python实现银行管理系统,供大家参考,具体内容如下有的地方用的方法的比较复杂,主要是为回顾更多的知识test1用来存类和函数#test1
- vue中引入html静态页面功能:系统中需增加帮助中心页面,由于页面较长,需要实现锚点定位跳转。1、开始用的路由方式,首先在router文件
- 安装保证你的用户有权限 安装 没有 切换 rootsu root (su的意思:swich user)# rpm -ivh http://d
- 1、下载python安装包,进入python官网(python.org)2、安装python,可根据需求选择默认安装或自定义安装,如下3、选
- Pytest和Unittest测试框架的区别?如何区分这两者,很简单unittest作为官方的测试框架,在测试方面更加基础,并且可以再次基础
- 简介如何简单的使用python来实现将一部视频转换为字符画视频的效果。 其实,大家都知道视频就是一帧一帧的图片构成的。  
- 我们在开发项目的时候经常会在后台管理时用到批量展示功能来动态的修改数据库的值。下面以修改数据库的status状态值来实现批量展示功能。批量选
- 举个简单的例子:(此仅限于修改change_form页面)原来的时候,change_form_list是包含这些按钮的:因为此页面继承了{%
- 检查node的版本和gulp版本,最好使用nvm来管理node版本,本人遇到这两种版本匹配的时候会造成layaair2-cmd命令编译报错的
- 之前爬美团外卖后台的时候出现的问题,各种方式拖动验证码都无法成功,包括直接控制拉动,模拟人工轨迹的随机拖动都失败了,最后发现只要用chrom
- 前言大家应该都有所体会,随着硬件层面的发展,linux系统多核已经是普通趋势,而mysql是单进程多线程,所以先天上对多进程的利用不是很高,
- 题目:用 JavaScript 代码实现空位补零,比如 pad(12, 3) => 012实现一:/* 平淡无奇法 */functio
- 一.Oracle日期和字符串互相转换1.1 日期转字符串1.1.1 yyyy年mm月dd日hh24時mi分ss秒手动拼接年月日select
- 字符x字符 x\\反斜线字符\0n带有八进制值 0 的字符 n (0 <=