计算机视觉与神经网络:从基础到实践
1. 神经网络训练基础
1.1 训练迭代与梯度下降
在神经网络训练中,对整个训练集进行一次完整迭代(从步骤 1 到 4)被称为一个轮次(epoch)。当每次仅随机选择一个训练样本(即 n = 1)进行训练时,这种过程被称为随机梯度下降(SGD)。SGD 易于实现和可视化,但速度较慢(更新次数更多)且噪声较大。因此,人们更倾向于使用小批量随机梯度下降,即使用较大的 n 值(受计算机性能限制),对每个包含 n 个随机训练样本的小批量数据计算梯度并求平均值,这样可以减少噪声。如今,无论 n 值如何,SGD 这个术语都被广泛使用。
1.2 网络训练代码实现
为了让网络具备分类能力,我们需要更新相关类的代码,实现反向传播和优化功能。
1.2.1 更新全连接层类
class FullyConnectedLayer(object):
# [...] (代码未改变部分)
def __init__(self, num_inputs, layer_size, activation_fn, d_activation_fn):
# [...] (代码未改变部分)
self.d_activation_fn = d_activation_fn # 激活函数的导数
self.x, self.y, self.dL_dW, self.dL_db = 0, 0, 0, 0 # 存储属性
def forward(self, x):
z = np.dot(x, self.W) +
超级会员免费看
订阅专栏 解锁全文

14万+

被折叠的 条评论
为什么被折叠?



