车辆重识别代码笔记12.20

1、model.named_parameters()

model.named_parameters() 返回一个生成器,生成每个参数的名称和相应的参数值。这对于查看和修改特定参数的可训练状态非常有用。

python 复制代码
model= DarkNet([1, 2, 8, 8, 4])
for name, param in model.named_parameters():
    print(name, param.requires_grad)
    param.requires_grad = False
python 复制代码
输出:
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)参数的更新策略可能不同,通常偏置项会使用与权重不同的超参数,尤其是在学习率和权重衰减方面。

具体解释:

  1. 偏置项(Bias)与权重(Weights)

    • 权重(Weights) 是神经网络中连接不同神经元的参数,决定了输入信号如何影响输出信号。

    • 偏置项(Bias) 是神经元中的一个额外参数,它用于调整输出,帮助网络更好地拟合数据。在每个神经元的输出计算中,偏置项是加在加权输入之上的常数。

  2. 为什么偏置项使用不同的学习率和权重衰减?

    • 学习率 :在训练神经网络时,偏置项通常会用较大的学习率进行更新,因为偏置项的优化过程往往比权重更新更简单,因此适合较大的步伐。权重通常更新得较慢,需要更小的学习率。

    • 权重衰减(Weight Decay) :在训练时,权重衰减用于惩罚模型中过大的权重,防止过拟合。 但对于偏置项,通常不需要这么严格的惩罚,因为它们主要用来调整输出而不是参与学习特征,因此对偏置项不应用权重衰减或应用较小的衰减。

  3. 代码中的实现

    python 复制代码
    if "bias" in key:
        lr = cfg.SOLVER.BASE_LR * cfg.SOLVER.BIAS_LR_FACTOR
        weight_decay = cfg.SOLVER.WEIGHT_DECAY_BIAS

    这里的代码检查参数名称中是否包含 "bias",如果是偏置项,则会做以下调整:

    • 将学习率 lr 乘以一个因子 BIAS_LR_FACTOR,从而为偏置项设置一个相对较高的学习率。

    • 将权重衰减 weight_decay 设置为一个专门为偏置项定义的较小值WEIGHT_DECAY_BIAS,避免对偏置项进行过度惩罚。

总结:

偏置项和权重的更新策略不同是因为它们在神经网络中扮演的角色不同,通常会使用不同的学习率和权重衰减。偏置项需要较大的学习率来快速调整输出,而权重需要更小的学习率并且通常会应用权重衰减来避免过拟合。

3、优化器

在深度神经网络中,优化器(Optimizer) 的主要作用是通过调整网络参数(如权重和偏置),以最小化(或最大化)损失函数,从而使模型的预测更准确。优化器控制了模型的学习过程,决定了如何使用梯度来更新网络参数,确保网络逐步接近最优解。

优化器的作用

  1. 更新网络参数: 神经网络训练的核心任务是根据梯度更新网络的参数。优化器根据计算得到的梯度调整每一层的权重和偏置,以使模型的预测误差逐渐减小。

  2. 最小化损失函数: 深度学习中的训练目标通常是最小化损失函数(Loss Function),这表示模型的预测值和真实标签之间的差异。优化器使用反向传播算法来计算损失函数关于模型参数的梯度,然后通过优化算法调整参数,使得损失最小化。

  3. 加速训练过程: 优化器通过智能地调整学习率、控制更新的方向和步幅(步长),有效地加速网络训练,避免停滞或过度震荡,提高训练过程的稳定性和效率。

优化器的工作流程

优化器的工作流程可以概括为以下几个步骤:

  1. 计算梯度: 在每次迭代中,通过反向传播计算每个参数的梯度(即损失函数关于每个参数的导数)。

  2. 更新参数: 使用梯度信息来更新网络参数。参数更新的规则根据所选的优化算法(如SGD、Adam、RMSprop等)不同而有所区别。

  3. 调整学习率: 大多数优化器会有一个学习率(Learning Rate),它控制了参数更新的步长。优化器会根据学习率以及梯度来决定每次更新的幅度。

  4. 优化过程的迭代: 优化器会在每一轮训练中根据计算的梯度和学习率不断更新模型的参数,直到损失函数收敛为止。

相关推荐
martian66521 分钟前
第17篇:python进阶:详解数据分析与处理
开发语言·python
无码不欢的我24 分钟前
使用vscode在本地和远程服务器端运行和调试Python程序的方法总结
ide·vscode·python
五味香25 分钟前
Java学习,查找List最大最小值
android·java·开发语言·python·学习·golang·kotlin
AIGC大时代26 分钟前
方法建议ChatGPT提示词分享
人工智能·深度学习·chatgpt·aigc·ai写作
金融OG31 分钟前
99.8 金融难点通俗解释:净资产收益率(ROE)
大数据·python·线性代数·机器学习·数学建模·金融·矩阵
fmdpenny1 小时前
Django的安装
后端·python·django
小爬菜1 小时前
Django学习笔记(启动项目)-03
前端·笔记·python·学习·django
小爬菜1 小时前
Django学习笔记(bootstrap的运用)-04
笔记·学习·django
陈钇钇1 小时前
持续升级《在线写python》小程序的功能,文章页增加一键复制功能,并自动去掉html标签
python·小程序·html