《視覺機器學習20講》中簡單講解了一下bp演算法的基本原理,公式推導看完後不是特別能理解,在網上找到乙個不錯的例子:bp演算法**(error back-propagation),對bp演算法的理解非常有幫助。於是為了加強記憶,將文中的示例**用python重新寫了一遍。
使用梯度下降演算法不斷迭代更新引數w,使得損失函式(例子中選取平方和誤差)最小。引數更新值δw用鏈式求導法則求出。
1最終結果:#-*- coding: utf-8 -*-
2import
numpy as np
3def sigmoid(x):#
啟用函式
4return 1/(1+np.exp(-x))
5 input = np.array([[0.35], [0.9]]) #
輸入資料
6 w1 = np.array([[0.1, 0.8], [0.4, 0.6]])#
第一層權重引數
7 w2 = np.array([0.3, 0.9])#
第二層權重引數
89 real = np.array([[0.5]])#
真實值10
for s in range(0,100,1):
11 pq = sigmoid(np.dot(w1,input))#
第一層輸出
12 output = sigmoid(np.dot(w2,pq))#
第二層輸出,也即是最終輸出
13 e = output-real #
誤差14
if np.square(e)/2<0.01:
15break
16else:17
#否則,按照梯度下降計算權重引數18#
其中,應用鏈式法則計算權重引數的更新量
19 w2 = w2 - e*output*(1-output)*pq.t
20 w1 = w1 - e*output*(1-output)*w2*pq.t*(1-pq.t)*input
21print w1,'
\n',w2 #
輸出最終結果
22print output
w1: [[ 0.09606536 0.78371966]為什麼沿著梯度的反方向函式f(x,y)在點p0(x0,y0)處下降得最快?[ 0.38988235 0.55813627]]
w2: [[ 0.12472196 0.72965595]]
output: [[ 0.63690405]]
梯度下降是求解機器學習演算法模型引數的一種常用方法
乙個簡單css例子
lang en charset utf 8 css講解title rel stylesheet href style.css body div dd xddaa hover abc ulli first child ulli last child ulli nth child 3 ulli only...
乙個簡單的json例子
名稱 年齡郵箱 response.setcontenttype text html charset utf 8 response.setheader cache control no cache jsonobject json new jsonobject try json.put jobs mem...
乙個poll的簡單例子
該程式使用poll事件機制實現了乙個簡單的訊息回顯的功能,其伺服器端和客戶端的 如下所示 伺服器端 start from the very beginning,and to create greatness author chuangwei lin e mail 979951191 qq.com b...