李宏毅全连接神经网络的实现过程
时间: 2025-01-03 13:37:09 浏览: 5
### 李宏毅课程中全连接神经网络的实现
#### 构建全连接层
在构建全连接神经网络时,每一层都通过权重矩阵 \(W\) 和偏置项 \(b\) 将输入转换为输出。对于给定的一组输入数据 \(X\),计算该层输出的过程可以表示为:
\[ Z = WX + b \]
其中,
- \(Z\) 是线性组合的结果;
- \(W\) 表示权重参数;
- \(b\) 表示偏置参数。
为了增加模型表达能力,在得到线性变换后的结果上应用非线性的激活函数,比如ReLU:
\[ A = ReLU(Z) \]
这一步骤能够帮助打破线性关系并赋予网络更强的学习特性[^1]。
```python
import numpy as np
def initialize_parameters(layer_dims):
"""
初始化各层参数
参数:
layer_dims -- 含有每层节点数目的列表, e.g., [n_x, n_h, n_y]
返回:
parameters -- 包含"Wl"和"bl"键值对的字典, l=1,...,L
"""
np.random.seed(3)
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 linear_forward(A_prev, W, b):
"""执行单个全连接层向前传播"""
Z = np.dot(W, A_prev) + b
cache = (A_prev, W, b)
return Z, cache
```
#### 前向传播与损失计算
完成上述初始化之后,就可以依次遍历各个隐藏层来进行前向传播操作,并最终到达输出层预测目标变量。在此基础上定义合适的代价函数来衡量实际输出与期望之间的差距,常用的选择包括均方误差(MSE)或交叉熵(Cross Entropy)[^2]。
```python
def compute_cost(AL, Y):
"""计算成本"""
m = Y.shape[1]
cost = (-1 / m) * np.sum(np.multiply(Y, np.log(AL)) + np.multiply(1 - Y, np.log(1 - AL)))
cost = np.squeeze(cost)
return cost
```
#### 反向传播更新权值
基于链式法则推导出关于每个参数梯度的信息,从而指导优化器调整这些数值以最小化整体错误率。此阶段涉及到了复杂的微积分运算以及矩阵求导技巧[^3]。
```python
def linear_backward(dZ, cache):
"""执行单个全连接层向后传播"""
A_prev, W, b = cache
m = A_prev.shape[1]
dW = (1/m)*np.dot(dZ,A_prev.T)
db = (1/m)*np.sum(dZ,axis=1,keepdims=True)
dA_prev = np.dot(W.T,dZ)
return dA_prev, dW, db
```
以上就是按照李宏毅教授在其公开课程资料里所描述的方法论搭建的一个简单的全连接型人工神经网络框架[^4]。
阅读全文