如下圖所示,其實質就是一種對映關係。
實質是更新權值,具體過程見如下公式。
如上節所示,學習率對權值更新速度影響極大。取值在0~1。
學習率太大,容易造成權值調整不穩定;
學習率太小,權值調整太慢,迭代次數太多。
一般有以下幾種情形:
假設我們有4個2維的資料,資料的特徵分別(3,3),(4,3),(1,1),(2,1)。(3,3),(4,3)這兩個資料的標籤為1,(1,1),(2,1)這兩個資料的標籤為-1,構建神經網路來進行分類。
import numpy as np
import matplotlib.pyplot as plt
# 定義輸入資料:2維資料為2個輸入節點,加乙個偏置值,此處設為1
x = np.array([[
1,3,
3],[
1,4,
3],[
1,1,
1],[
1,2,
1]])
# 定義標籤
t = np.array([[
1],[
1],[
-1],
[-1]
])# 權值初始化(3行:輸入個數,1列:輸出個數),0~1的隨機數
w = np.random.random([3
,1])
# 學習率設定
lr =
0.1# 神經網路輸出
y =0
# 更新權值函式
deftrain()
:global x,y,w,lr,t
# 同時計算4個資料的**值,y(4,1)
y = np.sign(np.dot(x,w)
)# t-y得到4個標籤值與**值的誤差e(4,1)
e = t - y
# 計算權值的變化(求均值)
delta_w = lr *
(x.t.dot(e)
)/ x.shape[0]
# 更新權值
w = w + delta_w
# 訓練模型
for i in
range
(100):
# 更新權值
train(
)# 列印當前訓練次數
print
('epoch:'
,i+1
)# 當前的權值
print
('weights:'
,w)# 計算當前輸出
y = np.sign(np.dot(x,w)
)# all()表示y中的所有值跟t中的所有值都對應相等,才為真
if(y == t)
.all()
:print
('finished'
)# 跳出迴圈
break
# 視覺化
# 正樣本的xy座標
x1 =[3
,4]y1 =[3
,3]# 負樣本xy座標
x2 =[1
,2]y2 =[1
,1]# 定義分類邊界線的斜率和截距(邊界線是w0+w1x1+w2x2=0)
k =-w[1]
/w[2
]d =
-w[0
]/w[2]
# 設定兩個點
xdata =(0
,5)# 通過兩點來確定一條直線,用紅色的線來畫出分界線
plt.plot(xdata,xdata*k+d,
'r')
# 用藍色的點畫正樣本
plt.scatter(x1,y1,c=
'b')
# 用黃色的點畫負樣本
一文搞懂transform skew
目錄 如何理解斜切 skew,先看乙個 demo。在下面的 demo 中,有 4 個正方形,分別是 紅色 不做 skew 變換,綠色 x 方向變換,藍色 y 方向變換,黑色 兩個方向都變換,拖動下面的滑塊可以檢視改變 skew 角度後的效果。切換 selector 可以設定 transform or...
(單層)感知機學習規則
假設感知器採用的是與閾值轉移函式相類似的符號轉移函式,其表示式為 f wtjx sgn wt jx 1,w tjx 0 1,wtjx 0 下標 j 表示的是不同的迭代次數。用於調整引數的學習訊號,等於神經元期望輸出與實際輸出之差 r dj o j權值調整公式應為 w j dj sgn w tjx x...
一文搞懂property函式
接下來我帶大家了解乙個函式的作用以及使用技巧,希望對大家都有幫助,話不多說,接下來就開始我的表演特性 首先property有兩種用法,一種是作為函式的用法,一種是作為裝飾器的用法,接下來我們就逐一分析 property函式 看一下作為函式它包含的引數都有哪些 property fget none,f...