天天看點

DL之Perceptron:感覺器(多層感覺機/人工神經元)的原理之基于numpy定義2層感覺機底層邏輯代碼(與門AND/與非門NAND/或門OR是)解決XOR異或問題之詳細攻略

DL之Perceptron:感覺器(多層感覺機/人工神經元)的原理之基于numpy定義2層感覺機底層邏輯代碼(與門AND/與非門NAND/或門OR是)解決XOR異或問題之詳細攻略

目錄

​​感覺器(多層感覺機/人工神經元)的原理之基于numpy定義2層感覺機底層邏輯代碼(與門AND/與非門NAND/或門OR是)解決XOR異或問題​​

​​設計思路​​

​​輸出結果​​

感覺器(多層感覺機/人工神經元)的原理之基于numpy定義2層感覺機底層邏輯代碼(與門AND/與非門NAND/或門OR是)解決XOR異或問題

設計思路

輸出結果

代碼實作

# DL之Perceptron:Perceptron感覺器(感覺機/多層感覺機/人工神經元)的原理之基于numpy定義2層感覺機底層邏輯代碼(與門AND/與非門NAND/或門OR是)解決XOR異或問題之詳細攻略



import numpy as np


# 1、最初的感覺機設計
# 僅包含與門——即AND()函數:當輸入的權重總和超過門檻值時傳回1,否則傳回0
def P_AND(x1, x2):
    w1, w2, theta = 0.5, 0.5, 0.7
    tmp = x1*w1 + x2*w2
    if tmp <= theta:
        return 0
    elif tmp > theta:
        return 1
 
print('P_AND(0, 0):',P_AND(0, 0)) # 輸出0
print('P_AND(1, 0):',P_AND(1, 0)) # 輸出0
print('P_AND(0, 1):',P_AND(0, 1)) # 輸出0
print('P_AND(1, 1):',P_AND(1, 1)) # 輸出1
 
 
# 2、進階的感覺機設計:帶有權重w、偏置b概念形式的三種門實作
#(1)、與門、與非門、或門是具有相同構造的感覺機,差別隻在于權重參數的值。
#(2)、w1、w2是控制輸入信号的重要性的參數,而偏置是調整神經元被激活的容易程度(輸出信号為1 的程度)的參數。但是根據上下文,有時也會将b、w1、w2 這些參數統稱為權重。

# 2.1、設計AND門
def AND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

# 2.2、設計NAND門
def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5]) # 僅權重和偏置與AND不同!
    b = 0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

# 2.3、設計OR門
def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])  # 僅權重和偏置與AND不同!
    b = -0.2
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
 
 
# 2.4、利用兩層感覺機實作異或門
#(1)、異或門是一種多層結構的神經網絡。這裡,将最左邊的一列稱為第0 層,中間的一列稱為第1 層,最右邊的一列稱為第2層。
def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y


print('XOR(0, 0):',XOR(0, 0)) # 輸出0
print('XOR(1, 0):',XOR(1, 0)) # 輸出1
print('XOR(0, 1):',XOR(0, 1)) # 輸出1
print('XOR(1, 1):',XOR(1, 1)) # 輸出0      

繼續閱讀