這段時間在學習神經網路相關的內容,神經網路的演算法裡面只要給定它特徵值丟進去,演算法就會自身跟新權重和誤差(偏置)。其實學習機器學習內容的時候,我對這些演算法過程是理解的,但是我對細節是模糊的。
所以,我需要寫點**,在電腦裡面跑一下,自己才能領會到演算法的真正含義。
那麼,下面我就列舉乙個輸入為二維的特徵值,輸出為一維的簡單的神經網路模擬。
例如: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 超引數優化 這是機器學習模型解決問題的最後乙個步驟,並不是整個解決方案的最後一步。不會調參就不能說會機器學習。引數...