神經網絡模型:感知器

感知器是神經網絡中的概念,是一個接受數個輸入,經過內部計算後得到輸出的模型,其模擬的是自然界的神經細胞:接受輸入信號的刺激,達到一定閾值後細胞體表現爲激發,否則爲抑制。

單層感知器

單層感知器最爲簡單,只有輸入層和輸出層,其計算規則爲:激發值爲輸入與權值的點積,若激發值大於某閾值則輸出1以代表激發,否則輸出-1代表抑制。
python代碼演示該模型:

class slp(object):
    def __init__(self,num):
        self.w = [0.0]*num
        self.input = [0.0]*num
        self.output = 0

    def input(self,ilist):
        if len(ilist) == len(self.input):
            self.input = ilist
        else:
            print 'length error'

    def calcu_result(self):
        iszie = len(self.input)
        res = sum([self.w[i]*self.input[i] for i in range(isize)])
        if res > 0:
            self.output = 1
        else:
            self.output = -1

這裏簡便起見以0爲閾值。
單層感知器可以實現簡單邏輯的判斷,但要求數據是線性可分的。對線性可分這個條件要求的原因在於其計算輸出的方法:output=wiinput(i)

要實現對線性不可分數據的分類,需要使用多層感知器。

多層感知器

多層感知器與單層感知器相比,多了一層隱藏層,隱藏層對於輸入和輸出都是透明的。

def mlp(object):
    def __init__(self,num):
        self.in_floor = [slp(num)]*num
        self.hide_floor = [slp(num)]*num
        self.w = [0.0]*num
        self.output = 0

    def input(self,ilist):
        if len(ilist) == len(self.in_floor):
            for item in self.in_floor:
                item.input(ilist)
        else:
            print 'length error'
    def calcu_result(self):
        in_for_hide = []
        for item in self.in_floor:
            item.calcu_result()
            in_for_hide.append(item.output)
        for item in self.hide_floor:
            item.input(in_for_hide)
            item.calcu_result()

        iszie = len(self.hide_floor)
        res = sum([self.w[i]*self.hide_floor[i].output for i in range(isize)])
        if res > 0:
            self.output = 1
        else:
            self.output = -1

可以看出,多層感知器是對單層感知器的擴展,輸入層到隱藏層就是多個單層感知器的組合,隱藏層各個節點的輸出又作爲輸入,組合爲輸出層的輸出。

注1:代碼中暫時未考慮權值的分配,權值的分配需要訓練算法。
注2:在代碼中以列表形式將輸入存入對象中,多層感知器中這樣做是低效的,會有大量的輸入數據冗餘。

參考資料:
http://blog.csdn.net/stan1989/article/details/8565499
http://blog.csdn.net/xiaowei_cqu/article/details/9004331

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章