機器學習之權重 偏置自動調參

2021-08-30 13:11:39 字數 2399 閱讀 9882

這段時間在學習神經網路相關的內容,神經網路的演算法裡面只要給定它特徵值丟進去,演算法就會自身跟新權重和誤差(偏置)。其實學習機器學習內容的時候,我對這些演算法過程是理解的,但是我對細節是模糊的。

所以,我需要寫點**,在電腦裡面跑一下,自己才能領會到演算法的真正含義。

那麼,下面我就列舉乙個輸入為二維的特徵值,輸出為一維的簡單的神經網路模擬。

例如:a有兩個特徵值,乙個特徵值是他有棍子,另乙個特徵值是他會躁動。現在我們有10組樣本,每個樣本的特徵值對應著a是否會和你打架的真實值。

x = [(1,1),(0.9,1.8),(2.3,1),(2.8,1.5),(1.3,4),(6,4.6),(4.2,5.1),(5.1,6.6),(6.2,5.6),(4.6,5.2)]

y = [-1,-1,-1,-1,1,1,1,1,1,1]

例如上面,x就是特徵值,比如第乙個樣本(1,1)就是a有棍子的概率為1,a會躁動的概率為1,此時對應y真實值是-1,那麼表示a不會生氣。再比如,最後乙個樣本(4.6,5.2),就是a有棍子的概率為4.6,a會躁動的概率為5.2,此時a對應的真實值為1,那麼表示此時a會生氣。

上面10組樣本就是真實情況下發生的,可以理解我10次惹了a,其中4次a沒有生氣,6次a生氣了。

那麼,我現在想弄乙個演算法出來,當下一次我再惹a時候,我輸入a有棍子的概率和a會躁動的概率,然後演算法自動給出此時會不會生氣,那麼根據演算法來判斷我該不該惹a了,哈哈哈,是不是很好玩。

我使用的是pycharm軟體進行**編寫,**寫的也比較簡單,需要匯入matplotlib庫,因為我把樣本用散點圖的形式表示出來。

另外,我對引數w1,

w2,b

w_1,w_2,b

w1​,w2

​,b進行初始賦值,分別為0.5,0.5,0.5 。這個初始值可以隨便賦值,反正你把樣本丟進去,這些引數會自動調參。因為我的樣本比較少,訓練個5~6邊權重和偏置基本就穩定下來了。

好了,廢話不多說,直接上**~

import matplotlib.pyplot as plt

class perceptron:

w1, w2, b = 0.5, 0.5, 0.5

x = [(1,1),(0.9,1.8),(2.3,1),(2.8,1.5),(1.3,4),(6,4.6),(4.2,5.1),(5.1,6.6),(6.2,5.6),(4.6,5.2)]

y = [-1,-1,-1,-1,1,1,1,1,1,1]

# 設定x軸標籤

plt.xlabel('x')

# 設定y軸標籤

plt.ylabel('y')

def show(self):

mark =

color =

# 把特徵值提取出來,x1是其中乙個特徵值,使用元組來儲存,有多維

x1, x2 = zip(*self.x)

for i in range(10):

s = self.w1 * x1[i] + self.w2 * x2[i] + self.b

if s>0:

else:

for _k,_c,_x1,_x2 in zip(mark,color,x1,x2):

plt.scatter(_x1,_x2,s=100,c=_c)

# mark引數不能用,不知道為什麼

# plt.scatter(_x1, _x2,mark = _k, s=100, c=_c)

s1 = (0,-self.b/self.w2)

s2 = (8,(-self.b-8*self.w1)/self.w2)

plt.plot([s1[0],s2[0]],[s1[1],s2[1]],'k-',linewidth=2.0,color='g')

plt.show()

def learn(self):

x1,x2 = zip(*self.x)

# 訓練次數10

for _ in range(10):

# 開始對每組樣本的特徵進行調參

for i in range(10):

s = self.w1 * x1[i] + self.w2 * x2[i] + self.b

if(s*self.y[i] <=0 ):

self.w1 += self.y[i] * x1[i]

self.w2 += self.y[i] * x2[i]

self.b += self.y[i]

print(self.w1,self.w2,self.b)

self.show()

#main

p = perceptron()

p.learn()

機器學習 調參

在實際調整引數之前,我們先要搞清楚兩個事情 1.調參的目的是什麼?2.調參調的東西具體是什麼?第乙個問題 調參的目的是什麼?調參的最終目的是要使訓練之後的模型檢測物體更精確,向程式的方向更靠近一步的話,就是使得損失函式 例如ssd中的loss 盡量小 因為利用訓練集訓練出來的模型質量在訓練過程中只能...

機器學習 關於調參

關於引數 feature scaling 機器學習中對於引數的理解不是數學中的數字,而是代表的是一種邏輯的趨勢的數字,這種邏輯是人類對場景的邏輯,也可以看作是人思想上對場景與數字引數的經驗,所以機器學習中的運算,不是數字的運算,而是邏輯的運算,如何設計出符合人類邏輯規律的運算,才能更好的 趨勢,這種...

機器學習 演算法調參

coding utf 8 演算法調參.ipynb automatically generated by colaboratory.original file is located at 超引數優化 這是機器學習模型解決問題的最後乙個步驟,並不是整個解決方案的最後一步。不會調參就不能說會機器學習。引數...