[Deep Learning] Numpy 實作 forward 向前傳

Bryan Yang
A multi hyphen life
3 min readMar 7, 2018

跟風~

很早以前就買了課程但是那時候看得很吃力,慢慢的累積一些常識和其他課程後再回去看反而比較看得懂.例如像這個簡單 nn 的實作

總共有三筆資料,兩個 features,最後要輸出三個結果

X = np.array([[0, 3.5],[1,2],[1,0.5]])
y = np.array([[1],[1],[0]])
print(X, X.shape)
## [[ 0. 3.5] # raw1
## [ 1. 2. ] # raw2
## [ 1. 0.5]] # raw3
print(y, y.shape)

第一層的參數 w_0 和 誤差項 b_0.w_b 是 2(input features) x 3(layer_0的節點數) 矩陣,b_0的數量和節點數相同.

w_0 = np.array([[0.5, 0.1, -0.3], [0.7, -0.3, 0.2]])
b_0 = np.array([0.4,0.1,0]).reshape(1,3)
print(w_0, w_0.shape)
##[[ 0.5 0.1 -0.3]
## [ 0.7 -0.3 0.2]] (2, 3)
print(b_0, b_0.shape)
##[[ 0.4 0.1 0. ]] (1, 3)

第二層

w_1 = np.array([0.8, 0.1, -0.1]).reshape(3,1)
b_1 = np.array([0.2]).reshape(1,1)
print(w_1, w_1.shape)
##[[ 0.8]
## [ 0.1]
## [-0.1]] (3, 1)
print(b_1, b_1.shape)
##[[ 0.2]] (1, 1)

activation function 這次選用 tanh,tanh 會把結果映射到 -1~1之間.

z = np.tanh(np.dot(X, w_0) + b_0)
print(z, z.shape)
##[[ 0.99333039 -0.73978305 0.60436778]
## [ 0.9800964 -0.37994896 0.09966799]
## [ 0.84828364 0.04995837 -0.19737532]] (3, 3)

最後使用 sigmoid 輸出得到 0~1 的機率分佈,也就是原始三筆資料為 1 的機率.

def sigmoid(x):
return 1 / (1 + np.exp(-x))
y_pred = sigmoid(np.dot(z, w_1) + b_1)## array([[ 0.70271272],
## [ 0.71831432],
## [ 0.71163955]])

--

--

Bryan Yang
A multi hyphen life

Data Engineer, Data Producer Manager, Data Solution Architect