python实现感知器
作者:momaojia 时间:2021-03-18 09:12:13
上篇博客转载了关于感知器的用法,遂这篇做个大概总结,并实现一个简单的感知器,也为了加深自己的理解。
感知器是最简单的神经网络,只有一层。感知器是模拟生物神经元行为的机器。感知器的模型如下:
给定一个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,感知器
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python pexpect模块及shell脚本except原理解析
2022-11-10 18:52:04
ASP脚本变量、函数、过程和条件语句
2008-10-14 14:43:00
![](https://img.aspxhome.com/file/UploadPic/200812/2008121313306289.gif)
12个Pandas/NumPy中的加速函数使用总结
2022-10-27 13:52:25
网页版权的正确写法
2007-09-22 09:13:00
PHP同时连接多个mysql数据库示例代码
2023-11-23 21:12:28
Design IT. (8),一匹“更快的马”
2009-02-11 12:19:00
js数组与字符串的相互转换方法
2023-06-24 09:41:48
React开发进阶redux saga使用原理详解
2023-08-06 09:08:33
Django在pycharm下修改默认启动端口的方法
2023-09-27 09:04:07
![](https://img.aspxhome.com/file/2023/9/76689_0s.jpg)
解决python文件字符串转列表时遇到空行的问题
2021-06-27 09:18:25
使用django实现一个代码发布系统
2022-06-28 02:42:45
![](https://img.aspxhome.com/file/2023/4/65114_0s.png)
HTML标签tbody的用法
2009-11-02 10:11:00
python cookie反爬处理的实现
2021-10-16 23:33:17
python基于tkinter制作下班倒计时工具
2022-09-17 00:43:36
![](https://img.aspxhome.com/file/2023/9/87889_0s.jpg)
在ASP.NET 2.0中操作数据之十一:基于数据的自定义格式化
2023-07-14 19:53:21
![](https://img.aspxhome.com/file/2023/7/75547_0s.png)
python随机获取列表中某一元素的方法
2023-08-23 18:25:13
asp中常用的文件处理函数
2009-01-08 18:09:00
python性能测试工具locust的使用
2021-06-28 09:12:50
![](https://img.aspxhome.com/file/2023/5/89095_0s.png)
Django 缓存配置Redis使用详解
2021-12-27 12:34:32
Django框架基础认证模块auth应用示例
2023-11-10 07:48:51
![](https://img.aspxhome.com/file/2023/0/64240_0s.png)