一文搞懂單層感知機

2021-10-06 09:32:12 字數 2032 閱讀 5888

如下圖所示,其實質就是一種對映關係。

實質是更新權值,具體過程見如下公式。

如上節所示,學習率對權值更新速度影響極大。取值在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...