線性神經網路 解決異或問題

2021-08-17 12:23:11 字數 1664 閱讀 3622

日常三大包

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

多想想upadte函式的原理,

這裡是先隨機乙個權重w,然後w的置換與x相乘去,得到的是乙個列

w1x1+w2x2+w3x3的形式

然後其與y進行比較,得到每個w梯度應該下降的多少,然後改變不停改變w得到最優值

#輸入資料

x=np.array([[1,0,0,0,0,0],

[1,1,0,1,0,0],

[1,0,1,0,0,1],

[1,1,1,1,1,1]])

#y=np.array([-1,1,1,-1])

#隨機學習權重

w=(np.random.random(6)-0.5)*2

lr=0.11

#計算迭代次數

n=0#神經網路輸出

o=0def

update

():global x,y,w,n,lr

n+=1

#這裡表示為每個對應的輸入x的三個變數*w.t,得到每個x有不同的權重相乘得到的結果

o=np.dot(x,w.t)

#這裡是通過損失函式來改變權值,這裡考慮了3個輸入所對應的每個w應該改變的權值

w_c=lr*(y-o.t).dot(x)/int(x.shape[0])

#這裡表示每個w應該的改變值

#如果資料很多那麼w_c會很大,所以我們應該/資料量

w+=w_c

print(w)

因為是三個變數,那麼可以通過x=(-b正負根號下b的平方-4c)/2a得到x的值

for i in range(1000):    #經過這裡就已經完成訓練了

update()

#線性的話,通過加大迴圈次數來減少誤差

#正樣本

x1=[0,1]

y1=[1,0]

#負樣本的座標

x2=[0,1]

y2=[0,1]

def calculate(x,root): #這裡傳入的x,這裡只是根據x得出y然後得出結果的圖形

a=w[5]

b=w[2]+x

*w[4]

c=w[0]+x

*w[1]+x

*x*w[3]

if root==1:

return (-b+np.sqrt(b*b-4

*a*c))/2

*aif root==2:

return (-b-np.sqrt(b*b-4

*a*c))/2

*axdata = np.linspace(-1,2)

#建立0,5的等差隨機數字

plt.figure()

#設定乙個圖

plt.plot(xdata,calculate(xdata,1),'r')

plt.plot(xdata,calculate(xdata,2),'r')

plt.plot(x1,y1,'bo')

plt.plot(x2,y2,'yo')

plt.show()

#繪製影象,xdata表示等差序列,最後面那個表示引數

線性神經網路(異或)

v np.dot x,w np.dot x,w array矩陣相乘 4 3乘3 1等於4 1 w lr x.t.dot y v int x.shape 0 np.dot x,w array矩陣相乘 3 4乘4 1等於3 1 v np.dot x,w np.dot x,w array矩陣相乘 4 3乘...

BP神經網路 解決異或問題

import numpy as np import matplotlib.pyplot as plt 輸入資料 4,3 x np.array 1,0,0 1,0,1 1,1,0 1,1,1 標籤y np.array 0,1,1,0 權值初始化,1行3列,取值範圍 1到1 v np.random.ra...

神經網路學習筆記(十二) 異或問題

在rosenblatt單層感知機中已經對異或問題做了介紹,並論證說明了只適用於線性分類問題的rosenblatt感知機無法對異或問題進行分類。然而非線性問題是普遍存在的,下面就使用帶隱藏節點的神經網路來解決異或問題。異或 xor 問題可以看做是單位正方形的四個角,響應的輸入模式為 0,0 0,1 1...