以1個輸入層、1個隱藏層和1個輸出層為例,分析程式設計中變數的維度。
初始化:
w1的維度: 隱藏層節點個數 *特徵個數
b1的維度: 1 * 隱藏層節點個數
w2的維度: 輸出層節點個數 * 隱藏層節點個數
b2的維度: 1 * 輸出層節點個數
前向傳播:
train_data 特徵數量 * 樣本數量
z1 = w1 * train_data 隱藏層節點個數 * 樣本數量
a1 : z1 隱藏層節點個數* 樣本數量
z2 = w2 * a1 輸出層節點個數 * 樣本數量
a2 : z2 輸出層節點個數 * 樣本數量
y : a2 輸出層節點個數 * 樣本數量
z1 = w1 * train_data + b1;
a1 = sigmoid(z1);
z2 = w2 * a1 + b2;
a2 = sigmoid(z2);
反向傳播:
da2 = dal 輸出層節點個數* 樣本數量 如果cost function等於y,則是這種情況
s2 = 1/(1+np.exp(-z2)) 輸出層節點個數* 樣本數量
dz2 = da2 .* s2 .* (1-s2) 輸出層節點個數* 樣本數量 不是點積,是按相同位置相乘。 s2 .* (1-s2)為sigmoid的導數
dw2 = (1/m) dz2 * a1.t 輸出層節點個數 *隱藏層節點個數
db2 = (1/m) sum(dz2) 輸出層節點個數 *1
da1 = w2.t * dz2 隱藏層節點個數 * 樣本數量
s1 = 1/(1+np.exp(-z1)) 隱藏層節點個數* 樣本數量
dz1 = da1 .* s1 .* (1-s1) 隱藏層節點個數* 樣本數量
dw1 = (1/m) dz1 * train_data.t 隱藏層節點個數 * 特徵個數
db1 = (1/m) sum(dz1) 隱藏層節點個數 *1
前向傳播和反向傳播 手撕 神經網路反向傳播
神經網路前向傳播一般用於搭建整個神經網路的結構框架,形成整個網路的邏輯通路。反向傳播用於更新每層之間的權重,減少損失,進而提公升 準確度。下面是乙個神經網路的結構圖 第一層是輸入層,包含兩個神經元i1,i2,和截距項b1 第二層是隱含層,包含兩個神經元h1,h2和截距項b2,第三層是輸出o1,o2,...
神經網路前向傳播與反向傳播
神經網路 神經網路可以理解為乙個輸入x到輸出y的對映函式,即f x y,其中這個對映f就是我們所要訓練的網路引數w,我們只要訓練出來了引數w,那麼對於任何輸入x,我們就能得到乙個與之對應的輸出y。只要f不同,那麼同乙個x就會產生不同的y,我們當然是想要獲得最符合真實資料的y,那麼我們就要訓練出乙個最...
神經網路 前向,反向傳播過程
x,資料集矩陣。每一行的元素代表了乙個樣例的特徵值x1,x2,x3.共有n行,說明資料集一共n個樣例 theta,引數矩陣 行數 要生成的神經元個數 列數 上一層的輸入個數 每一行的元素代表了對樣例各個特徵值的權重 以資料集為x 5 3 使用上圖的網路結構為例 輸入層 x 5 3 說明資料集有5個樣...