日常三大包
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...