概念
深层神经网络中的前向传播是指从输入数据开始,逐层计算每个神经元的输出值,直到得到最终的预测值。
一般步骤
1输入数据传递:
将输入数据传递给网络的输入层。输入数据通常是一个特征矩阵,每一列代表一个样本,每一行代表一个特征。
2加权求和和激活函数:
对于每个隐藏层,进行以下步骤:
3计算加权输入,即将输入数据与权重矩阵相乘并加上偏置向量。
将加权输入传递给激活函数,得到该隐藏层的激活值(输出)。常用的激活函数包括Sigmoid、ReLU、Tanh等。
4传递至下一层:
将当前隐藏层的输出作为下一隐藏层的输入,重复步骤 2,直到到达输出层。输出层的输出即为网络的预测值。
5返回预测值和缓存:
返回预测值(输出层的输出)以及在计算过程中保存的缓存(各层的加权输入和激活值),这些缓存在反向传播中会用到。
代码实现
python
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.01
parameters['b' + str(l)] = np.zeros((layer_dims[l], 1))
return parameters
# 前向传播
def forward_propagation(X, parameters):
caches = []
A = X
L = 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)