感知器(Perceptron)算法

发布时间:2016-02-03  栏目:深度学习  评论:0 Comments

感知器(Perceptron),是神经网络中的一个概念,在1950s由Frank Rosenblatt第一次引入。

单层感知器(Single Layer Perceptron)是最简单的神经网络。它包含输入层和输出层,而输入层和输出层是直接相连的。

图1.1

图1.1便是一个单层感知器,很简单一个结构,输入层和输出层直接相连。

接下来介绍一下如何计算输出端。

利用公式1计算输出层,这个公式也是很好理解。首先计算输入层中,每一个输入端和其上的权值相乘,然后将这些乘机相加得到乘机和。对于这个乘机和做如下处理,如果乘机和大于临界值(一般是0),输入端就取1;如果小于临界值,就取-1。

以下就给出一段单层感知器的代码。

[cpp]
  1. //////////////////////////////////////////////////////////////////////////
  2. //singlelayer perceptrons(SLP)
  3. bool slp_calculate_output(constdouble * inputs,constdouble * weights,intnInputs,int & output)
  4. {
  5.     if(NULL ==inputs || NULL == weights)
  6.         return false;
  7.     double sum =0.0;
  8.     for (int i = 0 ; i < nInputs ; ++i)
  9.     {
  10.         sum += (weights[i] * inputs[i]);
  11.     }
  12. //这里我们对乘机和的处理:如果大于0,则输出值为1;其他情况,输出值为-1
  13.     if(sum >0.0)
  14.         output = 1;
  15.     else
  16.         output = -1;
  17. }
  18. //////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//singlelayer perceptrons(SLP)
bool slp_calculate_output(constdouble * inputs,constdouble * weights,intnInputs,int & output)
{
    if(NULL ==inputs || NULL == weights)
        return false;
    double sum =0.0;
    for (int i = 0 ; i < nInputs ; ++i)
    {
        sum += (weights[i] * inputs[i]);
    }
//这里我们对乘机和的处理:如果大于0,则输出值为1;其他情况,输出值为-1
    if(sum >0.0)
        output = 1;
    else
        output = -1;
}
//////////////////////////////////////////////////////////////////////////

单层感知器其简单的特性,可以提供快速的计算。它能够实现逻辑计算中的NOT、OR、AND等简单计算。

但是对于稍微复杂的异或就无能无力。

留下评论

You must be logged in to post a comment.

相册集

pix pix pix pix pix pix

关于自己

杨文龙,微软Principal Engineering Manager, 曾在各家公司担任影像技术资深总监、数据科学团队资深经理、ADAS算法总监、资深深度学习工程师等职位,热爱创新发明,专注于人工智能、深度学习、图像处理、机器学习、算法、自然语言处理及软件等领域,目前发明有国际专利19篇,中国专利28篇。

联系我

个人技术笔记

welonshen@gmail.com

2015 in Shanghai