【深度学习基础】基于Numpy的感知机Perception构建和训练

1. 感知机模型

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

其试图在所有的线性可分超平面构成的假设空间中找到一个能使训练集中的数据可分的超平面

感知机并未对这一超平面做特殊要求,只要能区分开训练数据即可。因此,它找到的超平面并不一定是最优的,即可能只是恰好拟合了训练数据的超平面,其泛化能力并不佳。

2. 学习

由于直接最小化误分类点的个数并不可微,感知机的学习策略被设为:最小化误分类点到超平面的距离

在初始化超平面的参数即法向量和偏置后,迭代地计算样本的损失并求出参数的梯度,再基于SGD来更新参数即可,直到损失收敛后停止学习。

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分别拟合与门、非门和或门,再基于数字电路的知识将这三个门组合起来,即可以构成异或门。

最后的最后

感谢你们的阅读和喜欢,我收藏了很多技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你。

因为这个行业不同于其他行业,知识体系实在是过于庞大,知识更新也非常快。作为一个普通人,无法全部学完,所以我们在提升技术的时候,首先需要明确一个目标,然后制定好完整的计划,同时找到好的学习方法,这样才能更快的提升自己。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

五、面试资料

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下。
在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值