亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

感知機介紹及實現

2019-11-14 10:02:32
字體:
來源:轉載
供稿:網友

http://blog.csdn.net/fengbingchun/article/details/50097723

感知機介紹及實現

2015-11-29 17:32 2104人閱讀 評論(1) 收藏 舉報 分類:

感知機(perceptron)由Rosenblatt于1957年提出,是神經網絡與支持向量機的基礎。

感知機是最早被設計并被實現的人工神經網絡。感知機是一種非常特殊的神經網絡,它在人工神經網絡的發展史上有著非常重要的地位,盡管它的能力非常有限,主要用于線性分類。

感知機還包括多層感知機,簡單的線性感知機用于線性分類器,多層感知機(含有隱層的網絡)可用于非線性分類器。本文中介紹的均是簡單的線性感知機。

圖 1

感知機工作方式

         (1)、學習階段:修改權值和偏置,根據”已知的樣本”對權值和偏置不斷修改----有監督學習。當給定某個樣本的輸入/輸出模式對時,感知機輸出單元會產生一個實際輸出向量,用期望輸出(樣本輸出)與實際輸出之差來修正網絡連接權值和偏置。

         (2)、工作階段:計算單元變化,由響應函數給出新輸入下的輸出。

         感知機學習策略

感知機學習的目標就是求得一個能夠將訓練數據集中正負實例完全分開的分類超平面,為了找到分類超平面,即確定感知機模型中的參數w和b,需要定義一個基于誤分類的損失函數,并通過將損失函數最小化來求w和b。

         (1)、數據集線性可分性:在二維平面中,可以用一條直線將+1類和-1類完美分開,那么這個樣本空間就是線性可分的。因此,感知機都基于一個前提,即問題空間線性可分;

         (2)、定義損失函數,找到參數w和b,使得損失函數最小。

         損失函數的選取

         (1)、損失函數的一個自然選擇就是誤分類點的總數,但是這樣的點不是參數w,b的連續可導函數,不易優化;

         (2)、損失函數的另一個選擇就是誤分類點到劃分超平面S(w*x+b=0)的總距離。

以上理論部分主要來自: http://staff.ustc.edu.cn/~qiliuql/files/DM2013/2013SVM.pdf

以下代碼根據上面的描述實現:

perceptron.hpp:

[cpp] view plain copy 在CODE上查看代碼片#ifndef _PERCEPTRON_HPP_  #define _PERCEPTRON_HPP_    #include <vector>    namespace ANN {    typedef std::vector<float> feature;  typedef int label;    class Perceptron {  #include "perceptron.hpp"  #include <assert.h>  #include <time.h>  #include <iostream>    namespace ANN {    void Perceptron::updateWeight(const feature feature_, int label_)  {      for (int i = 0; i < size_weight; i++) {          weight[i] += learn_rate * feature_[i] * label_; // formula 5      }        bias += learn_rate * label_; // formula 5  }    float Perceptron::calDotProduct(const feature feature_, const std::vector<float> weight_)  {      assert(feature_.size() == weight_.size());      float ret = 0.;        for (int i = 0; i < feature_.size(); i++) {          ret += feature_[i] * weight_[i];      }        return ret;  }    void Perceptron::initWeight()  {      srand(time(0));      float range = 100.0;      for (int i = 0; i < size_weight; i++) {          float tmp = range * rand() / (RAND_MAX + 1.0);          weight.push_back(tmp);      }  }    Perceptron::Perceptron(int iterates_, float learn_rate_, int size_weight_, float bias_)  {      iterates = iterates_;      learn_rate = learn_rate_;      size_weight = size_weight_;      bias = bias_;      weight.resize(0);      feature_set.resize(0);      label_set.resize(0);  }    void Perceptron::getDataset(const std::vector<feature> feature_set_, const std::vector<label> label_set_)  {      assert(feature_set_.size() == label_set_.size());        feature_set.resize(0);      label_set.resize(0);        for (int i = 0; i < feature_set_.size(); i++) {          feature_set.push_back(feature_set_[i]);          label_set.push_back(label_set_[i]);      }  }    bool Perceptron::train()  {      initWeight();        for (int i = 0; i < iterates; i++) {          bool flag = true;            for (int j = 0; j < feature_set.size(); j++) {              float tmp = calDotProduct(feature_set[j], weight) + bias;              if (tmp * label_set[j] <= 0) {                  updateWeight(feature_set[j], label_set[j]);                  flag = false;              }          }            if (flag) {              std::cout << "iterate: " << i << std::endl;              std::cout << "weight: ";              for (int m = 0; m < size_weight; m++) {                  std::cout << weight[m] << "    ";              }              std::cout << std::endl;              std::cout << "bias: " << bias << std::endl;                return true;          }      }        return false;  }    label Perceptron::predict(const feature feature_)  {      assert(feature_.size() == size_weight);        return calDotProduct(feature_, weight) + bias >= 0 ? 1 : -1; //formula 2  }    }  test_NN.cpp:

[cpp] view%20plain copy #include <iostream>  #include "perceptron.hpp"    int test_perceptron();    int main()  {      test_perceptron();      std::cout << "ok!" << std::endl;  }    int test_perceptron()  {      // prepare data      const int len_data = 20;      const int feature_dimension = 2;      float data[len_data][feature_dimension] = { { 10.3, 10.7 }, { 20.1, 100.8 }, { 44.9, 8.0 }, { -2.2, 15.3 }, { -33.3, 77.7 },      { -10.4, 111.1 }, { 99.3, -2.2 }, { 222.2, -5.5 }, { 10.1, 10.1 }, { 66.6, 30.2 },      { 0.1, 0.2 }, { 1.2, 0.03 }, { 0.5, 4.6 }, { -22.3, -11.1 }, { -88.9, -12.3 },      { -333.3, -444.4 }, { -111.2, 0.5 }, { -6.6, 2.9 }, { 3.3, -100.2 }, { 5.6, -88.8 } };      int label_[len_data] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };        std::vector<ANN::feature> set_feature;      std::vector<ANN::label> set_label;        for (int i = 0; i < len_data; i++) {          ANN::feature feature_single;          for (int j = 0; j < feature_dimension; j++) {              feature_single.push_back(data[i][j]);          }            set_feature.push_back(feature_single);          set_label.push_back(label_[i]);            feature_single.resize(0);      }        // train      int iterates = 1000;      float learn_rate = 0.5;      int size_weight = feature_dimension;      float bias = 2.5;      ANN::Perceptron perceptron(iterates, learn_rate, size_weight, bias);      perceptron.getDataset(set_feature, set_label);      bool flag = perceptron.train();      if (flag) {          std::cout << "data set is linearly separable" << std::endl;      }      else {          std::cout << "data set is linearly inseparable" << std::endl;          return -1;      }        // predict      ANN::feature feature1;      feature1.push_back(636.6);      feature1.push_back(881.8);      std::cout << "the correct result label is 1, " << "the real result label is: " << perceptron.predict(feature1) << std::endl;        ANN::feature feature2;      feature2.push_back(-26.32);      feature2.push_back(-255.95);      std::cout << "the correct result label is -1, " << "the real result label is: " << perceptron.predict(feature2) << std::endl;        return 0;  }  

運行結果如下圖:

GitHub:https://github.com/fengbingchun/NN


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品视频在线免费观看| 日韩人在线观看| 亚洲精品第一页| 国语自产精品视频在线看一大j8| 欧美最顶级丰满的aⅴ艳星| 色老头一区二区三区在线观看| 国产日韩欧美另类| 国产精品美女久久| 欧美成人免费va影院高清| 91中文字幕在线观看| 日韩大片免费观看视频播放| 亚洲一区av在线播放| 久久精品视频亚洲| 亚洲国产精品一区二区三区| 国产精品久久久久高潮| 中文字幕av日韩| 尤物九九久久国产精品的特点| 国产日本欧美在线观看| 国产精品久久久久免费a∨| 亚洲精品国偷自产在线99热| 国产精品福利网| 日韩动漫免费观看电视剧高清| 欧美xxxx14xxxxx性爽| 久久精品免费播放| 久久久精品2019中文字幕神马| 激情懂色av一区av二区av| 欧美高清视频一区二区| 欧美性视频在线| 成人在线视频福利| 国产亚洲欧美日韩精品| 亚洲全黄一级网站| 最新日韩中文字幕| 一区二区福利视频| 久久最新资源网| 亚洲成人网在线观看| 国产精品影院在线观看| 欧美高清videos高潮hd| 秋霞午夜一区二区| 午夜剧场成人观在线视频免费观看| 亚洲国产精品人人爽夜夜爽| 亚洲天堂第一页| 成人网中文字幕| 亚洲三级av在线| 另类图片亚洲另类| 亚洲精品国偷自产在线99热| 91精品国产高清久久久久久91| 欧美在线观看网址综合| 俺去啦;欧美日韩| 亚洲电影成人av99爱色| 中文字幕亚洲色图| 欧美一区二区色| 中文字幕亚洲欧美日韩高清| 中文字幕一精品亚洲无线一区| 久热精品在线视频| 国产亚洲视频在线| 欧美夫妻性生活视频| 91中文在线视频| 亚洲精品91美女久久久久久久| 日韩精品在线免费| 亚洲欧美视频在线| 午夜精品久久久久久久99黑人| 亚洲第一区中文99精品| 久久亚洲私人国产精品va| 日韩久久午夜影院| 久久伊人精品视频| 北条麻妃久久精品| 26uuu国产精品视频| 亚洲日韩第一页| 高清视频欧美一级| 日本精品中文字幕| 成人国产在线视频| 欧美在线视频网| 亚洲sss综合天堂久久| 久久6免费高清热精品| 亚洲欧洲日产国码av系列天堂| 欧美精品成人91久久久久久久| 日韩电影免费观看中文字幕| 午夜精品www| 久久久久久久久电影| 欧美国产视频一区二区| 91福利视频网| 欧美激情二区三区| 亚洲偷欧美偷国内偷| 亚洲xxx自由成熟| 亚洲一区二区在线| 国产成人avxxxxx在线看| 亚洲高清久久久久久| 日韩精品www| 91在线视频成人| 日日摸夜夜添一区| 日韩欧美在线国产| 日韩精品免费在线视频| 亚洲日韩欧美视频| 成人精品在线视频| 欧美精品久久久久久久| 亚洲色图欧美制服丝袜另类第一页| 亚洲无限av看| 国产精品视频最多的网站| 成人久久一区二区三区| 91tv亚洲精品香蕉国产一区7ujn| 激情久久av一区av二区av三区| 日韩美女视频中文字幕| 日韩精品免费观看| 国产精品久久久久久久久久尿| 国产欧美日韩专区发布| 欧美成人免费在线视频| www.日韩视频| 国产一区视频在线| 欧美极品少妇与黑人| 久久久av电影| 一区二区av在线| 国产精品美女主播| 青草青草久热精品视频在线网站| 91在线视频免费| 亚洲一区久久久| 日韩av一卡二卡| 久久免费视频网站| 26uuu久久噜噜噜噜| 精品国产一区二区三区久久狼黑人| 国产精品第2页| 992tv在线成人免费观看| www.亚洲免费视频| 性色av一区二区三区| 国产精品一区二区久久精品| 国产精品久久久91| 日韩视频―中文字幕| 日韩免费在线视频| 国产精品视频专区| 97欧美精品一区二区三区| 日本精品久久电影| 久久精品久久精品亚洲人| 国产深夜精品福利| 韩剧1988免费观看全集| 日韩高清中文字幕| 另类美女黄大片| 日韩一区二区在线视频| 欧美在线一区二区视频| 亚洲日本欧美日韩高观看| 亚洲美女av网站| 亚洲欧美日韩第一区| 91久久精品美女| 国语自产偷拍精品视频偷| 国产精品视频免费观看www| 国产一级揄自揄精品视频| 亚洲欧美一区二区三区久久| 尤物yw午夜国产精品视频| 欧美一级电影免费在线观看| 丁香五六月婷婷久久激情| 91九色国产在线| 日本高清视频精品| 欧美精品一区二区三区国产精品| 亚洲天堂影视av| 国产精品美女999| 8x拔播拔播x8国产精品| 热99精品只有里视频精品| 成人免费视频网址| 国产精品久久久91| www.午夜精品| 成人国产精品一区| 成人福利网站在线观看11| 久久精品最新地址| 欧美日韩免费在线| 97香蕉超级碰碰久久免费软件| 96精品久久久久中文字幕|