1、model.named_parameters()
model.named_parameters()
返回一个生成器,生成每个参数的名称和相应的参数值。这对于查看和修改特定参数的可训练状态非常有用。
model= DarkNet([1, 2, 8, 8, 4])
for name, param in model.named_parameters():print(name, param.requires_grad)param.requires_grad = False
输出:
conv1.weight True
bn1.weight True
bn1.bias True
layer1.ds_conv.weight True
layer1.ds_bn.weight True
layer1.ds_bn.bias True
layer1.residual_0.conv1.weight True
layer1.residual_0.bn1.weight True
layer1.residual_0.bn1.bias True
layer1.residual_0.conv2.weight True
layer1.residual_0.bn2.weight True
layer1.residual_0.bn2.bias True
layer2.ds_conv.weight True
layer2.ds_bn.weight True
layer2.ds_bn.bias True
layer2.residual_0.conv1.weight True
layer2.residual_0.bn1.weight True
layer2.residual_0.bn1.bias True
....
通过这种方式,你可以查看和更改每个参数的可训练属性。
model.named_parameters() 用于获取模型参数的名称和参数本身,可以更改参数的 requires_grad 属性。
2、偏置项(bias)学习率和权重衰减
在神经网络中,偏置项(bias)和其他权重(weights)参数的更新策略可能不同,通常偏置项会使用与权重不同的超参数,尤其是在学习率和权重衰减方面。
具体解释:
-
偏置项(Bias)与权重(Weights):
-
权重(Weights) 是神经网络中连接不同神经元的参数,决定了输入信号如何影响输出信号。
-
偏置项(Bias) 是神经元中的一个额外参数,它用于调整输出,帮助网络更好地拟合数据。在每个神经元的输出计算中,偏置项是加在加权输入之上的常数。
-
-
为什么偏置项使用不同的学习率和权重衰减?
-
学习率:在训练神经网络时,偏置项通常会用较大的学习率进行更新,因为偏置项的优化过程往往比权重更新更简单,因此适合较大的步伐。权重通常更新得较慢,需要更小的学习率。
-
权重衰减(Weight Decay):在训练时,权重衰减用于惩罚模型中过大的权重,防止过拟合。但对于偏置项,通常不需要这么严格的惩罚,因为它们主要用来调整输出而不是参与学习特征,因此对偏置项不应用权重衰减或应用较小的衰减。
-
-
代码中的实现:
if "bias" in key:lr = cfg.SOLVER.BASE_LR * cfg.SOLVER.BIAS_LR_FACTORweight_decay = cfg.SOLVER.WEIGHT_DECAY_BIAS
这里的代码检查参数名称中是否包含 "bias",如果是偏置项,则会做以下调整:
-
将学习率
lr
乘以一个因子BIAS_LR_FACTOR
,从而为偏置项设置一个相对较高的学习率。 -
将权重衰减
weight_decay
设置为一个专门为偏置项定义的较小值WEIGHT_DECAY_BIAS
,避免对偏置项进行过度惩罚。
-
总结:
偏置项和权重的更新策略不同是因为它们在神经网络中扮演的角色不同,通常会使用不同的学习率和权重衰减。偏置项需要较大的学习率来快速调整输出,而权重需要更小的学习率并且通常会应用权重衰减来避免过拟合。
3、优化器
在深度神经网络中,优化器(Optimizer) 的主要作用是通过调整网络参数(如权重和偏置),以最小化(或最大化)损失函数,从而使模型的预测更准确。优化器控制了模型的学习过程,决定了如何使用梯度来更新网络参数,确保网络逐步接近最优解。
优化器的作用
-
更新网络参数: 神经网络训练的核心任务是根据梯度更新网络的参数。优化器根据计算得到的梯度调整每一层的权重和偏置,以使模型的预测误差逐渐减小。
-
最小化损失函数: 深度学习中的训练目标通常是最小化损失函数(Loss Function),这表示模型的预测值和真实标签之间的差异。优化器使用反向传播算法来计算损失函数关于模型参数的梯度,然后通过优化算法调整参数,使得损失最小化。
-
加速训练过程: 优化器通过智能地调整学习率、控制更新的方向和步幅(步长),有效地加速网络训练,避免停滞或过度震荡,提高训练过程的稳定性和效率。
优化器的工作流程
优化器的工作流程可以概括为以下几个步骤:
-
计算梯度: 在每次迭代中,通过反向传播计算每个参数的梯度(即损失函数关于每个参数的导数)。
-
更新参数: 使用梯度信息来更新网络参数。参数更新的规则根据所选的优化算法(如SGD、Adam、RMSprop等)不同而有所区别。
-
调整学习率: 大多数优化器会有一个学习率(Learning Rate),它控制了参数更新的步长。优化器会根据学习率以及梯度来决定每次更新的幅度。
-
优化过程的迭代: 优化器会在每一轮训练中根据计算的梯度和学习率不断更新模型的参数,直到损失函数收敛为止。