车辆重识别代码笔记12.20

embedded/2024/12/23 0:12:03/

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


http://www.ppmy.cn/embedded/147938.html

相关文章

浏览器引入elasticsearch-head插件

elasticsearch-head插件下载: 链接: https://pan.baidu.com/s/1Dz3aU42HZCNg45iJoDOsMg?pwduvhg 提取码: uvhg 1、打开浏览器设置 2、选择拓展程序 3、选择elasticsearch-head插件下载 4、打开es-head插件 5、修改ip 6、登录

二级 字符数组3

目录 删除单词后缀删除前n个x排除外星基因删除第n个单词删除第3和单词删除单词中的 删除单词后缀 描述 给定一个单词,如果该单词以er、ly或者ing后缀结尾, 则删除该后缀(题 目保证删除后缀后的单词长度不为0), 否则…

前端三件套-css

一、元素选择器 元素选择器:利用标签名称。p,h1-h6… 行内样式(内联样式):例如 id选择器:针对某一个特定的标签来使用。以#定义。 class(类)选择器:可以被多种标签使用&#xff0…

leetcode----mysql

1327. 列出指定时间段内所有的下单产品 - 力扣(LeetCode) 表: Products --------------------------- | Column Name | Type | --------------------------- | product_id | int | | product_name | varchar | | product_catego…

Pytorch应用实战(1)- 基于YOLO的视频人脸马赛克处理

免费链接: Blogger(需翻Q), Github 文章目录 本文介绍给图片的人脸打码给视频的人脸打码本文介绍 YoloV11(Github)提供了非常方便的API帮助用户实现目标检测(detect)、语义分割(segement)、肢体识别(Pose)等功能。 本文将基于YoloV11的目标检测来实现一个视频人脸马…

机器学习-正则化技术

文章目录 拟合正则化正则项L1 正则化(Lasso)L2 正则化(Ridge) 多元线性回归的正则化回归形式代码 拟合 过拟合:参数(特征)过多(理解为考虑很多因素)或者说过多专注于原来的训练数据…

mysql的事务和存储引擎+备份

mysql的事务和存储引擎备份 一. mysql的事务1.1 mysgl支持事务四种隔离级别1.2 事务控制语句1.3 行锁和死锁1.3.1 行锁1.3.2 死锁1.3.3 如何避免死锁的发生 二. msyql的备份和还原以及日志管理2.1 数据库备份的分类2.2 备份策略2.2.1 物理冷备份(全量)2.…

RabbitMQ消息队列的笔记

Rabbit与Java相结合 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 在配置文件中编写关于rabbitmq的配置 rabbitmq:host: 192.168.190.132 /…