1. 感知机模型

  感知机Perception是一个线性的分类器,其只适用于线性可分的数据
          f(x) = sign(w.x + b)

其试图在所有线性可分超平面构成的假设空间中找到一个能使训练集中的数据可分的超平面。
因此,它找到的并不一定是最优的,即只是恰好拟合了训练数据的超平面。

2. 学习

感知机的学习策略为:最小化误分类点到超平面的距离。

3. 基于numpy的感知机实现

 1 # coding: utf-8
2 import numpy as np
3
4
5 def prepare_data(n=100):
6 # Fitting OR gate
7 def OR(x):
8 w = np.array([0.5, 0.5])
9 b = -0.2
10 tmp = np.sum(w*x) + b
11 if tmp <= 0:
12 return 0
13 else:
14 return 1
15
16 inputs = np.random.randn(n, input_size)
17 labels = np.array([OR(inputs[i]) for i in range(n)])
18 return inputs, labels
19
20
21 class Perception:
22 def __init__(self, input_size, lr=0.001):
23 # 初始化权重和偏置
24 self.w = np.random.randn(input_size)
25 self.b = np.random.randn(1)
26 self.lr = np.array(lr)
27
28 def predict(self, x):
29 tmp = np.sum(self.w*x) + self.b
30 if tmp <= 0:
31 return -1
32 else:
33 return 1
34
35 def update(self, x, y):
36 # 基于SGD的参数更新(由最小化误分类点到超平面的距离求导可得)
37 self.w = self.w + self.lr*y*x
38 self.b = self.b + self.lr*y
39
40
41 n = 1000 # 训练样本数
42 ratio = 0.8 # 训练测试比
43 input_size = 2
44
45 print("Preparing Data {}".format(n))
46 X, Y = prepare_data(n)
47 clip_num = int(n * ratio)
48 train_X, train_Y = X[:clip_num], Y[:clip_num]
49 test_X, test_Y = X[clip_num:], Y[clip_num:]
50
51 # Init model
52 lr = 0.005
53 model = Perception(input_size, lr)
54 s = model.predict(X[0])
55 print("Input: ({}, {}), Output: {}".format(X[0][0], X[0][1], s))
56
57 # Training
58 epoches = 100
59 for i in range(epoches):
60 loss = 0
61 wrong_index = []
62 print("\nEpoch {}".format(i+1))
63 print("Forward Computing")
64 for idx in range(clip_num):
65 pred_y = model.predict(train_X[idx])
66 if pred_y != train_Y[idx]:
67 wrong_index.append(idx)
68 tmp_loss = abs(float(np.sum(model.w*train_X[idx]) + model.b))
69 loss += tmp_loss
70
71 print("Wrong predict samples: {}, Loss: {}".format(len(wrong_index), loss))
72 print("Learning")
73 for j in wrong_index:
74 model.update(train_X[j], train_Y[j])
75
76
77 # Testing
78 wrong_num = 0
79 test_loss = 0
80 for j in range(test_X.shape[0]):
81 pred_y = model.predict(test_X[j])
82 if pred_y != test_Y[j]:
83 tmp_loss = abs(float(np.sum(model.w*test_X[j]) + model.b))
84 test_loss += tmp_loss
85 wrong_num += 1
86 print("\nTest wrong predict samples: {}, Loss: {}".format(wrong_num , test_loss))

4. 感知机的延伸

感知机Perception是线性模型,它不能学习非线性函数,因而它对线性不可分的数据束手无力。

例如,感知机可以拟合与门(AND)或门(OR)非门(NOT)产生的数据,但是不能处理好异或门(XOR)产生的数据。

基于感知机,可以延伸出LRSVM。此外,值得注意的是,虽然单个感知机的表达能力有限,但是如果将多个感知机叠加起来,则可以具备足够

强的表达能力,即 Multi-layer Perception(MLP)的通用近似定理(给定足够多的数据和足够宽的两层MLP,可以近似任意连续函数)。

《深度学习入门:基于Python的理论与实现》书中有一个直观的例子。假设用三个Perception分别拟合与门、非门和或门,再基于数字电路的知识将这三个门组合起来,即可以构成异或门。

深度学习基础-基于Numpy的感知机Perception构建和训练的更多相关文章

  1. 深度学习基础-基于Numpy的多层前馈神经网络(FFN)的构建和反向传播训练

    本文是深度学习入门: 基于Python的实现.神经网络与深度学习(NNDL)以及花书的读书笔记.本文将以多分类任务为例,介绍多层的前馈神经网络(Feed Forward Networks,FFN)加上 ...

  2. 深度学习基础-基于Numpy的卷积神经网络(CNN)实现

    本文是深度学习入门: 基于Python的实现.神经网络与深度学习(NNDL)以及动手学深度学习的读书笔记.本文将介绍基于Numpy的卷积神经网络(Convolutional Networks,CNN) ...

  3. [笔记] 基于nvidia/cuda的深度学习基础镜像构建流程 V0.2

    之前的[笔记] 基于nvidia/cuda的深度学习基础镜像构建流程已经Out了,以这篇为准. 基于NVidia官方的nvidia/cuda image,构建适用于Deep Learning的基础im ...

  4. 算法工程师<深度学习基础>

    <深度学习基础> 卷积神经网络,循环神经网络,LSTM与GRU,梯度消失与梯度爆炸,激活函数,防止过拟合的方法,dropout,batch normalization,各类经典的网络结构, ...

  5. AI炼丹 - 深度学习必备库 numpy

    目录 深度学习必备库 - Numpy 1. 基础数据结构ndarray数组 1.1 为什么引入ndarray数组 1.2 如何创建ndarray数组 1.3 ndarray 数组的基本运算 1.4 n ...

  6. 深度学习基础系列(九)| Dropout VS Batch Normalization? 是时候放弃Dropout了

    Dropout是过去几年非常流行的正则化技术,可有效防止过拟合的发生.但从深度学习的发展趋势看,Batch Normalizaton(简称BN)正在逐步取代Dropout技术,特别是在卷积层.本文将首 ...

  7. 深度学习基础系列(五)| 深入理解交叉熵函数及其在tensorflow和keras中的实现

    在统计学中,损失函数是一种衡量损失和错误(这种损失与“错误地”估计有关,如费用或者设备的损失)程度的函数.假设某样本的实际输出为a,而预计的输出为y,则y与a之间存在偏差,深度学习的目的即是通过不断地 ...

  8. TensorFlow深度学习基础与应用实战高清视频教程

    TensorFlow深度学习基础与应用实战高清视频教程,适合Python C++ C#视觉应用开发者,基于TensorFlow深度学习框架,讲解TensorFlow基础.图像分类.目标检测训练与测试以 ...

  9. 百度DMLC分布式深度机器学习开源项目(简称“深盟”)上线了如xgboost(速度快效果好的Boosting模型)、CXXNET(极致的C++深度学习库)、Minerva(高效灵活的并行深度学习引擎)以及Parameter Server(一小时训练600T数据)等产品,在语音识别、OCR识别、人脸识别以及计算效率提升上发布了多个成熟产品。

    百度为何开源深度机器学习平台?   有一系列领先优势的百度却选择开源其深度机器学习平台,为何交底自己的核心技术?深思之下,却是在面对业界无奈时的远见之举.   5月20日,百度在github上开源了其 ...

随机推荐

  1. python数据处理matplotlib入门(2)-利用随机函数生成变化图形

    综合前述的类.函数.matplotlib等,完成一个随机移动的过程(注意要确定移动的次数,比如10万次),每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策确定的,最后显示出每次移动的位置 ...

  2. create-react-app的TS支持以及css模块化

    开始: 利用官方脚手架,搭建react工程.参考:https://react.docschina.org/docs/create-a-new-react-app.html. 过程: 1.暴露webpa ...

  3. IIS发布Https和Https的问题

    asp.net调试页面的时候遇到一个问题,我喜欢右键点击在浏览器查看页面,打开的页面默认是https的,其实iis会同时生成http和https两种页面,但是我懒得每次去点.问题是页面中测试接口是ht ...

  4. .NET Core 企业微信消息推送

    接口定义 应用支持推送文本.图片.视频.文件.图文等类型.请求方式:POST(HTTPS)请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send? ...

  5. zabbix 线路质量监控自定义python模块,集成ICMP/TCP/UDP探测,批量监控线路质量自定义阈值联动mtr保存线路故障日志并发送至noc邮箱

    互联网故障一般表现为丢包和时延增大,持续性故障不难排查,难的是间歇性或凌晨故障,后者往往来不及等我们测试就已经恢复正常,得不到异常时的mtr无法判断故障点在哪里 故此有了根据丢包率和时延变换联动mtr ...

  6. 关于Linux添加字体

    安装字体命令 yum -y install fontconfig 查看已经安装的字体 fc-list # 查看已经已经安装的中文字体 fc-list :lang=zh 在字体目录下创建新的目录或者使用 ...

  7. 690. Employee Importance - LeetCode

    Question 690. Employee Importance Example 1: Input: [[1, 5, [2, 3]], [2, 3, []], [3, 3, []]], 1 Outp ...

  8. 好客租房41-react组件基础综合案例-渲染列表数据

    1渲染列表 在state定义数据 进行数据渲染 //导入react import React from 'react' import ReactDOM from 'react-dom' //导入组件 ...

  9. AOSP查看当前要打进系统里的都有哪些包

    发现问题: 修改系统时常常需要预置APK,这就要修改PRODUCT_PACKAGES这个变量,那么如何查看这个数组的值呢?我们可能直接在mk文件中去打印它,后来发现打印它只会显示继承关系(即继承自了哪 ...

  10. python函数学习的总结

    python函数 part1 函数的作用: 函数以功能(完成一件事)为导向 随调随用减少代码重复性 增强代码可读性 函数的结构: def 函数名(): 函数体 函数的返回值 return:在函数中遇到 ...