由於單層神經網路不能將異或的判定分為兩類。所以需要輸入層/隱藏層/輸出層
用兩個與門和乙個或門實現
需要三個神經單元
參考西瓜書:
# 兩層感知器實現異或
# m-p神經元
# 閾值設定:與1,1,2 或1,1,0.5 非-0.6,0,0.5
def union(w,x,b):
"""m-p神經元
:param w:權重矩陣
:param x:輸入矩陣
:param b:閾值
:return:輸入
"""# 輸入 = w和x的向量積 - 閾值
return step_func(np.dot(w,x)-b)
# 自己寫的階躍函式
def step_func(x):
if x >= 0:
return 1
else:
return 0
# 異或
# 實現方式:y = ( a & -b ) | ( -a & b )
def xor():
# a & -b
w1 = np.array([1, -1])
# -a & b
w2 = np.array([-1, 1])
# ( a & -b ) | ( -a & b )
w3 = np.array([1, 1])
while 1 :
a = int(input("x1=:"))
b = int(input("x2=:"))
# 輸入
x = np.array([a, b])
# 隱藏層a1
a1 = union(w1,x,0.5)
# 隱藏層b1
b1 = union(w2,x,0.5)
xx = np.array([a1,b1])
c1 = union(w3,xx,0.5)
print("輸出是:",c1)
if __name__ == "__main__":
xor()
感知器的scala實現
其實感知器學習演算法,就是利用第一節介紹的單層感知器。首先利用給的正確資料,計算得到輸出值,將輸出值和正確的值相比,由此來調整每乙個輸出端上的權值。公式便是用來調整權值,首先 是乙個 學習引數 一般我將它設定成小於1的正數。t便是訓練資料中的正確結果,便是第i個輸入端的輸入值,便是第i個輸入端上面的...
感知器的scala實現
其實感知器學習演算法,就是利用第一節介紹的單層感知器。首先利用給的正確資料,計算得到輸出值,將輸出值和正確的值相比,由此來調整每乙個輸出端上的權值。公式便是用來調整權值,首先 是乙個 學習引數 一般我將它設定成小於1的正數。t便是訓練資料中的正確結果,便是第i個輸入端的輸入值,便是第i個輸入端上面的...
python 實現感知器(一)
基礎知識不再重述,可參考 coding utf 8 這裡定義乙個感知器的類 class perceptron object def init self,input num,activator 初始化感知器,設定輸入引數的個數,以及啟用函式。啟用函式的型別為double double self.act...