概念
深層神經網絡中的前向傳播是指從輸入數據開始,逐層計算每個神經元的輸出值,直到得到最終的預測值。
一般步驟
1輸入數據傳遞:
將輸入數據傳遞給網絡的輸入層。輸入數據通常是一個特征矩陣,每一列代表一個樣本,每一行代表一個特征。
2加權求和和激活函數:
對于每個隱藏層,進行以下步驟:
3計算加權輸入,即將輸入數據與權重矩陣相乘并加上偏置向量。
將加權輸入傳遞給激活函數,得到該隱藏層的激活值(輸出)。常用的激活函數包括Sigmoid、ReLU、Tanh等。
4傳遞至下一層:
將當前隱藏層的輸出作為下一隱藏層的輸入,重復步驟 2,直到到達輸出層。輸出層的輸出即為網絡的預測值。
5返回預測值和緩存:
返回預測值(輸出層的輸出)以及在計算過程中保存的緩存(各層的加權輸入和激活值),這些緩存在反向傳播中會用到。
代碼實現
import numpy as np# Sigmoid 激活函數
def sigmoid(x):return 1 / (1 + np.exp(-x))# 初始化參數
def initialize_parameters(layer_dims):parameters = {}L = len(layer_dims) # 網絡層數for l in range(1, L):parameters['W' + str(l)] = np.random.randn(layer_dims[l], layer_dims[l - 1]) * 0.01parameters['b' + str(l)] = np.zeros((layer_dims[l], 1))return parameters# 前向傳播
def forward_propagation(X, parameters):caches = []A = XL = len(parameters) // 2 # 網絡層數for l in range(1, L):Z = np.dot(parameters['W' + str(l)], A) + parameters['b' + str(l)]A = sigmoid(Z)caches.append((Z, A))Z = np.dot(parameters['W' + str(L)], A) + parameters['b' + str(L)]AL = sigmoid(Z)caches.append((Z, AL))return AL, caches# 示例數據
X = np.random.randn(3, 10) # 3個特征,10個樣本
layer_dims = [3, 4, 5, 1] # 輸入層維度、各隱藏層維度、輸出層維度
parameters = initialize_parameters(layer_dims)# 前向傳播
AL, caches = forward_propagation(X, parameters)# 打印預測值
print("預測值:", AL)