深度学习神经网络第①篇——感知器及其Python实现

小詹小詹,感知器是个什么鬼啊

小小詹同学

感知器是由美国计算机科学家罗森布拉特(F.Roseblatt)于1957年提出的。感知器可谓是最早的人工神经网络。单层感知器是一个具有一层神经元、采用阈值激活函数的前向网络。通过对网络权值的训练,可以使感知器对一组输人矢量的响应达到元素为0或1的目标输出,从而实现对输人矢量分类的目的。

谁的某某某

&*&*&*说人话!

小小詹同学

好吧好吧,给你看张图!

下图是一个感知器:

可以看到,一个感知器有如下组成部分:

01

输入权值

其中,每一个输入分量Xj(j=1,2…,r)通过一个权值分量wj,进行加权求和,并作为阈值函数的输人。偏差b的加入(对应上图中的w0,这样是便于书写和理解)使得网络多了一个可调参数,为使网络输出达到期望的目标矢量提供了方便。感知器特别适合解决简单的模式分类问题。

02

激活函数

激活函数则有较多的选择,较为常见的有sigmoid函数和阶跃函数,这里以阶跃函数为例!

03

输出

感知器的输出则由如下公式计算得出:

谁的某某某

恍然大悟的赶脚,那么感知器有个屌用呢?

小小詹同学

F.Roseblatt已经证明,如果两类模式是线性可分的(指存在一个超平面将它们分开),则算法一定收敛。

谁的某某某

能举个例子嘛?

小小詹同学

很多的呀,比如最简单的的布尔运算。可以看作是二分类问题,即给定一个输入,输出0(属于分类0)或1(属于分类1)。它还可以拟合任何的线性函数,任何线性分类或线性回归问题都可以用感知器来解决。给你讲讲感知器的训练过程吧

利用下面的感知器规则迭代的修改参数直到训练完成。

其中,

Wi是与输入Xi应的权重项,b偏置项。事实上,可以把b作是值永远为1的输入Xb对应的权重。t 是训练样本的实际值,一般称之为label。而 y 感知器的输出值,它是根据公式计算得出。η一个称为学习速率的常数,其作用是控制每一步调整权的幅度。

每次从训练数据中取出一个样本的输入向量 x ,使用感知器计算其输出 y,再根据上面的规则来调整权重。每处理一个样本就调整一次权重。经过多轮迭代后(即全部的训练数据被反复处理多轮),就可以训练出感知器的权重,使之实现目标函数。

下边是根据感知器算法编写出的python代码实现:(实践时是利用一个鸢尾花数据集archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data)

class Perceptron():
    """
    eta: learning rate(0.0-1.0)
    n_iter:passes over the traing dataset
    w_:weights after fitting
    errors_:number of misclassifications in every epoch
    """
    def __init__(self,eta=1,n_iter=10):
        self.eta = eta
        self.n_iter = n_iter
    def fit(self,X,y):
        """fit training data."""
        self.w_ = np.zeros(1 + X.shape[1])
        self.errors_ = []
        for _ in range(self.n_iter):
            errors = 0
            for xi,target in zip(X,y):
                update = self.eta * (target - self.predict(xi))
                self.w_[1:] += update * xi
                self.w_[0] += update
                errors += int(update != 0.0)
            self.errors_.append(errors)
        return self
    def net_input(self,X):
        """caculate net input"""
        return np.dot(X,self.w_[1:]) + self.w_[0]
        #a.dot(b)   np.dot(a,b)    sum(i*j for i,j in zip(a,b))
    def predict(self,X):
        """return class label after unit step"""
        return np.where(self.net_input(X) >= 0.0, 1, -1)

搭配上必要的绘图模块,可以实现对鸢尾花种类的识别,这里只是对感知器进行介绍,就不过多叙述其他模块了~(需要完整代码的可以添加小詹微信索要)

往期推荐

Python爬虫系列——入门到精通

Python爬虫实例之——小说下载

老司机带你用python来爬取妹子图

知乎大神爬取高颜值美女(Python爬虫+人脸检测+颜值检测)

千元资料免费送——人工智能相关(100G+)

资源福利第二弹——PPT模板和求职简历

资源福利第三弹——Python等教程(包括部分爬虫入门教程)

原文发布于微信公众号 - 小詹学Python(xiaoxiaozhantongxue)

原文发表时间:2018-04-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT派

随机森林之美

导语:随机森林和决策树相比,能更好的防止过拟合。虽然每个基分类器很弱,但最后组合的结果通常很强,这也类似于:“三个臭皮匠顶个诸葛亮”的思想。对比发现Random...

4354
来自专栏AI深度学习求索

实验artifacts优化:生成图片反卷积与棋盘伪影

生成图片实验中总会出现各种各样的artifacts,这几天跑实验遇到了棋盘伪影,在前辈指导下了解了如何解决这个问题,记录一下

1612
来自专栏MyBlog

Procedural Noise Adversarial Examples for Black-Box Attacks on Deep Neural Networks 论文笔记(2)

该文章提出一种利用程序化噪声来生成对抗样本的方法, 所提出的方法和那些通过梯度不断修改以至于到达分类器的边界的方法不一样, 上述方法需要对目标的模型有一定的了解...

751
来自专栏机器之心

构建深度神经网络,我有20条「不成熟」的小建议

在我们的机器学习实验室中,我们已经在许多高性能的机器上进行了成千上万个小时的训练,积累了丰富的经验。在这个过程中,并不只有电脑学习到了很多的知识,事实上我们研究...

1111
来自专栏MyBlog

Procedural Noise Adversarial Examples for Black-Box Attacks on Deep Neural Networks论文笔记(1)

如今一些深度神经网络对于一些对抗性样本(Adversarial sample)是弱势的, 对抗性样本就是指我们对输入进行特定的改变, 通过原有的学习算法最终导致...

2403
来自专栏AI研习社

用 TensorFlow 实现物体检测的像素级分类

雷锋网 AI 科技评论按:本文作者 Priyanka Kochhar 从事数据科学十多年,现在在运营一家深度学习咨询公司,她曾帮助多家创业公司完成人工智能解决方...

952
来自专栏量子位

教程丨机器学习算法:从头开始构建逻辑回归模型

1031
来自专栏CDA数据分析师

7种数据分析领域中最为人称道的降维方法

近来由于数据记录和属性规模的急剧增长,大数据处理平台和并行数据分析算法也随之出现。于此同时,这也推动了数据降维处理的应用。实际上,数据量有时过犹不及。有时在数据...

3028
来自专栏CreateAMind

以假乱真的生成图片的效果

昨天发的图片是训练到6小时的效果LS-GAN非常棒的效果!,今天略微调整继续训练:也出现了生成网络跟不上判别网络的情况,加快生成网络训练循环。

872
来自专栏iOSDevLog

初学者的十大机器学习算法

“哈佛商业评论”(Harvard Business Review)的文章将“数据科学家”称为“21世纪最性感的工作”,对ML算法的研究获得了极大的吸引力。因此,...

1203

扫码关注云+社区

领取腾讯云代金券