PyTorch中,动态调整学习率(Learning Rate Scheduling),也可以根据损失函数的损失数值自动调整学习率

在PyTorch中,动态调整学习率(Learning Rate Scheduling)是一种常用的技术,

用于在训练过程中根据一定的策略调整学习率,以优化模型的训练效果和收敛速度。以下是一些常见的学习率调整策略:

1. **固定步长衰减(Step Decay)**:
   在训练过程中,每隔一定的epoch数,学习率会乘以一个小于1的衰减系数。

   ```python
   import torch

   scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)
   for epoch in range(num_epochs):
       train(...)
       validate(...)
       scheduler.step()
   ```

2. **指数衰减(Exponential Decay)**:
   学习率按照指数函数衰减。

   ```python
   scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.9)
   for epoch in range(num_epochs):
       train(...)
       validate(...)
       scheduler.step()
   ```

3. **余弦退火(Cosine Annealing)**:
   学习率按照余弦函数的形式进行调整,通常用于达到更好的收敛效果。

   ```python
   scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=100)
   for epoch in range(num_epochs):
       train(...)
       validate(...)
       scheduler.step()
   ```

4. **余弦退火与重启(Cosine Annealing With Warm Restarts)**:
   在每次达到最小学习率后,学习率会重置到初始值,并重新开始余弦退火。

   ```python
   scheduler = torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0=10, T_mult=2)
   for epoch in range(num_epochs):
       train(...)
       validate(...)
       scheduler.step()
   ```

5. **学习率查找器(Learning Rate Finder)**:
   在训练开始前,快速地遍历不同的学习率,以找到最佳的学习率范围。

   ```python
   from torch.optim.lr_scheduler import _LRScheduler

   class LRFinder(_LRScheduler):
       def __init__(self, optimizer, end_lr=10, num_it=100, last_epoch=-1):
           self.end_lr = end_lr
           self.num_it = num_it
           self.start_lr = 1e-7
           super(LRFinder, self).__init__(optimizer, last_epoch)

       def get_lr(self):
           return [self.start_lr + (base_lr - self.start_lr) * (self.end_lr - self.start_lr) * (i / self.num_it) for i, base_lr in enumerate(self.base_lrs)]

       def step(self, epoch=None):
           for param_group, lr in zip(self.optimizer.param_groups, self.get_lr()):
               param_group['lr'] = lr

   # 使用
   lr_finder = LRFinder(optimizer)
   for i in range(lr_finder.num_it):
       lr_finder.step()
       train(...)
   ```

6. **自定义学习率调整**:
   你也可以根据需要自定义学习率调整策略。

   ```python
   def custom_lr(epoch):
       if epoch < 10:
           return 0.1
       elif epoch < 20:
           return 0.01
       else:
           return 0.001

   for epoch in range(num_epochs):
       current_lr = custom_lr(epoch)
       for param_group in optimizer.param_groups:
           param_group['lr'] = current_lr
       train(...)
       validate(...)
   ```

在实际应用中,你可以根据模型的具体情况和训练目标选择合适的学习率调整策略。记得在每次epoch结束后调用`scheduler.step()`来更新学习率。
 

在PyTorch中,确实可以根据损失函数的变化来动态调整学习率。

这种策略通常被称为自适应学习率调整,其中最著名的是`ReduceLROnPlateau`。这个调度器会监控一个指标(通常是验证集上的损失),如果在一定数量的epochs(`patience`参数)内该指标没有改善,学习率就会按照给定的因子(`factor`参数)进行衰减。

以下是如何使用`ReduceLROnPlateau`的一个例子:

```python
from torch.optim.lr_scheduler import ReduceLROnPlateau

# 假设optimizer是你选择的优化器
optimizer = torch.optim.Adam(model.parameters(), lr=initial_lr)

# 设置ReduceLROnPlateau调度器
scheduler = ReduceLROnPlateau(optimizer, 'min', factor=0.1, patience=10, verbose=True)

for epoch in range(num_epochs):
    # 训练模型 ...
    
    # 计算验证集上的损失
    val_loss = validate(model, val_loader)
    
    # 调用scheduler.step()并传入验证集上的损失
    scheduler.step(val_loss)
```

在这个例子中,`'min'`模式表示当验证集上的损失停止下降时,学习率会降低。`factor=0.1`表示学习率会乘以0.1,`patience=10`表示如果验证集损失在连续10个epochs内没有改善,则降低学习率。

还有一些其他的学习率调整策略,如`StepLR`、`ExponentialLR`和`CosineAnnealingLR`,它们根据epoch数来调整学习率,而不是基于损失函数的变化。

但是,如果你想要更直接地根据损失函数的变化来调整学习率,`ReduceLROnPlateau`是一个很好的选择。

在实际应用中,你可能需要根据模型的具体表现和训练目标来调整`ReduceLROnPlateau`的参数,以达到最佳的训练效果。
 

在PyTorch中,根据模型在验证集上的表现来调整学习率的衰减因子,通常使用`ReduceLROnPlateau`调度器。这个调度器会监控一个指标(通常是验证集上的损失),如果在一定数量的epochs内该指标没有改善,学习率就会按照给定的因子进行衰减。

以下是如何使用`ReduceLROnPlateau`的一个例子:

```python
from torch.optim.lr_scheduler import ReduceLROnPlateau

# 假设optimizer是你选择的优化器
optimizer = torch.optim.Adam(model.parameters(), lr=initial_lr)

# 设置ReduceLROnPlateau调度器
scheduler = ReduceLROnPlateau(optimizer, 'min', factor=0.1, patience=10, verbose=True)

for epoch in range(num_epochs):
    # 训练模型 ...
    
    # 计算验证集上的损失
    val_loss = validate(model, val_loader)
    
    # 调用scheduler.step()并传入验证集上的损失
    scheduler.step(val_loss)
```

在这个例子中,`'min'`模式表示当验证集上的损失停止下降时,学习率会降低。`factor=0.1`表示学习率会乘以0.1,`patience=10`表示如果验证集损失在连续10个epochs内没有改善,则降低学习率。`verbose=True`表示会打印学习率变化的信息。

你可以根据模型的具体表现和训练目标来调整`ReduceLROnPlateau`的参数,例如`factor`和`patience`,以达到最佳的训练效果。记得在每个epoch结束后,使用验证集的损失来调用`scheduler.step()`,以便根据模型的表现动态调整学习率。
 

在PyTorch中,除了`ReduceLROnPlateau`之外,还有多种学习率调度器(Scheduler)可以用于根据模型在验证集上的表现来调整学习率。以下是一些推荐的调度器:

1. **StepLR**:按照给定的步数(`step_size`)逐步降低学习率,每次衰减的倍数由`gamma`参数决定。

2. **MultiStepLR**:在指定的milestones(如epoch数)降低学习率,衰减倍数由`gamma`参数决定。

3. **ExponentialLR**:按照指数衰减的方式逐步降低学习率,衰减率由`gamma`参数决定。

4. **CosineAnnealingLR**:使用余弦退火策略逐步降低学习率,模拟退火过程,使得学习率在某个周期内先减少后增加。

5. **LambdaLR**:允许用户定义一个函数,根据epoch数动态调整学习率。

6. **CyclicLR**:根据循环学习率策略调整学习率,学习率会在设定的范围内周期性变化。

7. **OneCycleLR**:根据1Cycle策略调整学习率,该策略在训练过程中先增加后减少学习率,有助于模型快速收敛。

8. **CosineAnnealingWarmRestarts**:与`CosineAnnealingLR`类似,但是会在学习率降到最低后重新开始新的周期,有助于模型跳出局部最优。

这些调度器可以根据训练过程中的不同需求和模型表现来选择使用。例如,如果模型在验证集上的损失不再显著下降,可以使用`ReduceLROnPlateau`来降低学习率,以便模型能够在更低的学习率下细致搜索最优解。而`CosineAnnealingLR`和`OneCycleLR`等策略则适用于需要周期性调整学习率的场景。

在使用这些调度器时,通常在每个epoch结束后调用`scheduler.step()`来更新学习率。如果是`ReduceLROnPlateau`,则需要传入验证集的损失值作为参数。其他调度器则根据其策略自动调整学习率,无需额外参数。

选择合适的学习率调度器并调整其参数,可以帮助模型在训练过程中更好地收敛,提高模型的性能。
 

在PyTorch中,自定义学习率调度器的参数通常涉及到两个方面:一是使用现有的学习率调度器(Scheduler)类并通过其提供的参数进行配置,二是创建完全自定义的学习率调度器。

### 使用现有学习率调度器的参数

PyTorch中的每个学习率调度器都提供了一系列的参数,可以通过设置这些参数来调整学习率的行为。以下是一些常见的学习率调度器及其参数的例子:

1. **StepLR**
   ```python
   scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)
   ```

2. **MultiStepLR**
   ```python
   scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones=[30, 80], gamma=0.1)
   ```

3. **ExponentialLR**
   ```python
   scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.95)
   ```

4. **CosineAnnealingLR**
   ```python
   scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=50, eta_min=0)
   ```

5. **ReduceLROnPlateau**
   ```python
   scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, 'min', factor=0.1, patience=10)
   ```

6. **LambdaLR**
   ```python
   lambda1 = lambda epoch: epoch // 10
   scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda1)
   ```

### 创建完全自定义的学习率调度器

如果现有的学习率调度器不能满足需求,可以通过继承`torch.optim.lr_scheduler._LRScheduler`基类来创建自定义的学习率调度器。自定义调度器需要重写`get_lr()`方法,该方法返回一个学习率列表,列表中的每个元素对应优化器中参数组的当前学习率。

下面是一个简单的自定义学习率调度器的例子:

```python
from torch.optim.lr_scheduler import _LRScheduler

class CustomScheduler(_LRScheduler):
    def __init__(self, optimizer, my_param1, my_param2, ...):
        self.my_param1 = my_param1
        self.my_param2 = my_param2
        # ...其他初始化代码
        super(CustomScheduler, self).__init__(optimizer)

    def get_lr(self):
        # 根据自定义的策略计算学习率
        return [self.custom_strategy(base_lr, self.last_epoch) for base_lr in self.base_lrs]

    def custom_strategy(self, base_lr, epoch):
        # 自定义学习率调整策略
        if epoch < 10:
            return base_lr * (0.1 ** self.my_param1)
        else:
            return base_lr * (0.1 ** self.my_param2)
```

使用自定义调度器:

```python
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
scheduler = CustomScheduler(optimizer, my_param1=2, my_param2=3)
```

在训练循环中,你需要在每个epoch结束后调用`scheduler.step()`来更新学习率。

通过自定义学习率调度器,你可以实现几乎任何你想要的学习率调整策略,为模型的训练提供更多的灵活性。
 

在PyTorch中,有多种学习率调度器(Scheduler)可以支持根据模型在验证集上的表现动态调整学习率。以下是一些支持这种功能的调度器:

1. **ReduceLROnPlateau**:这是一个自适应学习率调整调度器,它会在验证指标(如损失)在指定的`patience`周期内没有改善时,降低学习率。`factor`参数用于指定学习率衰减的倍数。例如,如果`factor`设置为0.1,则学习率将乘以0.1进行衰减。`mode`参数可以设置为'min'或'max',分别对应监控指标是否停止减少或增加。

2. **LambdaLR**:这个调度器允许你定义一个函数,根据当前的epoch数动态调整学习率。你可以设计自己的衰减函数,例如指数衰减或自定义衰减策略。

3. **MultiplicativeLR**:这个调度器会乘以一个因子来调整学习率,这个因子可以在每个epoch后由你定义的函数确定。

4. **CyclicLR**:这个调度器会周期性地调整学习率,使其在设定的最小和最大值之间变化。这种策略有助于模型在训练过程中跳出局部最优。

5. **OneCycleLR**:这个调度器实现了One Cycle策略,它在一个epoch内先增加后减少学习率,有助于模型快速收敛。

6. **CosineAnnealingLR**和**CosineAnnealingWarmRestarts**:这两个调度器使用余弦退火策略来调整学习率,它们在训练过程中创建一个余弦波形的学习率变化。

使用这些调度器时,通常在每个epoch结束后调用`scheduler.step()`来更新学习率。对于`ReduceLROnPlateau`,你需要传入验证集的损失值作为参数。其他调度器则根据其策略自动调整学习率,无需额外参数。

你可以根据模型的具体表现和训练目标来选择合适的学习率调整策略。例如,如果你发现模型在验证集上的性能停滞不前,可以尝试使用`ReduceLROnPlateau`来降低学习率,以期模型能够在更低的学习率下继续学习并改善性能。

下面是 转载自 https://blog.csdn.net/AI_dataloads/article/details/134127621

它们可以被分为三类:

(1)有序调整: 等间隔调整(Step),多间隔调整(MultiStep),指数哀减(Exponential),余弦退火(CosineAnnealing);

(2)自适应调整: 依训练状况机而变,通过监测某个指标的变化情况(loss、accuracy),当该指标不怎么变化时,就是调整学习率的时机(ReduceLROnPlateau);

(3)自定义调整:通过自定义关于epoch的lambda函数调整学习率(LambdaLR)。

其中,最重要的是有序调整,下面进行详细介绍:

1、等间隔调整:torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma, last_epoch=-1)

optimizer(必需参数):这是要调整学习率的优化器对象,通常是 torch.optim.Optimizer 的一个实例。StepLR 调度器将会修改该优化器的学习率。

step_size(必需参数):表示学习率下降的周期数。当训练周期的数量达到 step_size 的倍数时,学习率将按照 gamma 的值进行降低。例如,如果 step_size 为 30,那么学习率将在第 30、60、90,以及之后的周期进行降低。

gamma(必需参数):衰减因子,用于指定学习率下降的倍数。在每个周期结束时,学习率将乘以 gamma 的值以降低学习率。通常,gamma 的值是小于 1 的浮点数,以降低学习率,例如,0.1 表示学习率减小为原来的 10%。

last_epoch(可选参数,默认为 -1):这个参数表示最后一个训练周期的索引。如果不提供此参数,它会被初始化为 -1,然后在每次学习率更新后自动递增。

2、多间隔调整:torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1)

optimizer(必需参数):这是要调整学习率的优化器对象,通常是 torch.optim.Optimizer 的一个实例。MultiStepLR 调度器将会修改该优化器的学习率。

milestones(必需参数):这是一个列表,其中包含了一系列训练周期的索引,学习率在这些周期结束时会降低。例如,如果 milestones 是 [30, 50, 80],那么学习率将在第 30、50、80 个周期结束时降低。

gamma(可选参数,默认为 0.1):衰减因子,用于指定学习率下降的倍数。在每个里程碑处,学习率将乘以 gamma 的值以降低学习率。通常,gamma 的值是小于 1 的浮点数,以降低学习率,例如,0.1 表示学习率减小为原来的 10%。

last_epoch(可选参数,默认为 -1):这个参数表示最后一个训练周期的索引。如果不提供此参数,它会被初始化为 -1,然后在每次学习率更新后自动递增。

3、指数哀减:torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma, last_epoch=-1)

optimizer(必需参数):这是要调整学习率的优化器对象,通常是 torch.optim.Optimizer 的一个实例。ExponentialLR 调度器将会修改该优化器的学习率。

gamma(必需参数):衰减因子,用于指定学习率下降的倍数。在每个训练周期结束时,学习率将乘以 gamma 的值以降低学习率。通常,gamma 的值是小于 1 的浮点数,以降低学习率。例如,如果 gamma 为 0.9,学习率将每个周期降低为原来的 90%。

last_epoch(可选参数,默认为 -1):这个参数表示最后一个训练周期的索引。如果不提供此参数,它会被初始化为 -1,然后在每次学习率更新后自动递增。

4、余弦退火:torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1)

optimizer(必需参数):这是要调整学习率的优化器对象,通常是 torch.optim.Optimizer 的一个实例。CosineAnnealingLR 调度器将会修改该优化器的学习率。

T_max(必需参数):这是一个整数,表示学习率在一个周期内变化的次数。一个完整的周期是指学习率从最大值开始下降到 eta_min(下面介绍)再上升到最大值的过程。T_max 决定了一个完整周期的长度。

eta_min(可选参数,默认为 0):这是学习率在一个周期内的最小值,通常是一个小的非负数。学习率将在一个周期内从最大值下降到 eta_min,然后再上升到最大值。这有助于避免学习率过小,从而防止训练提前停止或陷入局部最小值。

last_epoch(可选参数,默认为 -1):这个参数表示最后一个训练周期的索引。如果不提供此参数,它会被初始化为 -1,然后在每次学习率更新后自动递增。

下面就是四种有序调整函数的学习率(lr)对于训练次数(epoch)的变化曲线:


                        

损失函数 损失数值不变化到时候 ,应该增加学习率还是减小学习率

当损失函数的损失数值不再发生变化时,这通常意味着模型已经达到了当前学习率下的收敛状态,或者可能陷入了局部最优。在这种情况下,是否增加或减小学习率取决于你想要模型达到的效果和当前的训练阶段。以下是一些可能的策略:

1. **减小学习率**:
   - 如果模型在训练集上的损失不再下降,但在验证集上的表现仍然不佳,减小学习率可能有助于模型更细致地逼近最优解,避免在最优点附近“跳跃”。
   - 小的学习率可以帮助模型在当前区域进行更精细的搜索,可能有助于跳出局部最优,找到更好的全局最优解。

2. **增加学习率**:
   - 如果模型在训练集上的损失不再下降,并且已经通过了充分的训练(例如,训练了很长时间或者已经收敛),增加学习率可能有助于模型跳出当前的局部最优,进行更广泛的搜索。
   - 然而,增加学习率通常伴随着风险,因为过大的学习率可能导致模型训练不稳定,甚至发散。

3. **其他策略**:
   - **学习率退火(Annealing)**:逐渐减小学习率,这是一种常见的策略,可以帮助模型在训练后期稳定下来。
   - **学习率预热(Warmup)**:在训练初期逐渐增加学习率,然后在后期逐渐减小,这有助于模型在初期快速收敛,后期稳定下来。
   - **自适应学习率调整**:使用如`ReduceLROnPlateau`这样的调度器,当验证集上的损失不再改善时,自动减小学习率。

在实际操作中,通常建议先尝试减小学习率,因为过大的学习率可能导致模型训练不稳定。如果减小学习率后模型仍然没有改善,可以考虑使用更复杂的学习率调整策略,或者检查模型架构、数据预处理等其他因素是否需要优化。此外,可以尝试使用不同的优化算法,或者引入正则化、 Dropout 等技术来提高模型的泛化能力。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML沙漏爱心

目录 写在前面 完整代码 下载代码 代码分析 系列文章 写在最后 写在前面 教你用HTML语言实现炫酷的沙漏爱心,该代码不仅可以用电脑运行,手机、平板也可以直接运行哦。 完整代码 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><…

06:【江科大stm32】:定时器输入捕获功能

定时器输入捕获功能 1、通过定时器的输入捕获功能测量PWM波的频率2、PWMI模式测量频率和占空比 1、通过定时器的输入捕获功能测量PWM波的频率 定时器标准库相关的编程接口&#xff1a; ①PWM.c文件的代码如下&#xff1a; /*通过定时器TIM2生成一个分辨率为10us,频率为1KHz的…

【Java设计模式】Bridge模式:在Java中解耦抽象与实现

文章目录 【Java设计模式】Bridge模式&#xff1a;在Java中解耦抽象与实现一、概述二、Bridge设计模式的别名三、Bridge设计模式的意图四、Bridge模式的详细解释及实际示例五、Java中Bridge模式的编程示例六、Bridge模式类图七、Java中何时使用Bridge模式八、Java中Bridge模式的…

如何成为一个飞控算法工程师?

兄弟&#xff0c;这个问题问得好&#xff0c;但也别想着靠看几本书就能一步登天。飞控算法这玩意儿&#xff0c;真要干好了&#xff0c;不是简简单单几个公式几个库就能搞定的。你本科电子专业有点基础&#xff0c;玩过四轴飞行器也算是入门了&#xff0c;但要搞真算法&#xf…

第8讲 ,ISP 串口程序下载

1 硬件的连接 需要使用 串口下载软件。 flymcu 这是 正点原子的 自启动电路。 2 stm32 的串口下载的原理 stm32 下载 只能是 串口一 &#xff0c; 也就是 PA9&#xff0c; PA10 3 然后是 stm32 的启动顺序 这里使用的是 第二种的 启动模式&#xff0c; 也就是 通过 串口进行烧…

如何使用IDEA搭建Mybatis框架环境(详细教程)

文章目录 ☕前言为什么学习框架技术Mybatis框架简介 &#x1f379;一、如何配置Mybatis框架环境1.1下载需要MyBatis的jar文件1.2部署jar文件1.3创建MyBatis核心配置文件configuration.xml1.4.创建持久类(POJO)和SQL映射文件1.5.创建测试类 &#x1f9cb;二、 MyBatis框架的优缺…

Unity获取SceneView尺寸

获取SceneView尺寸 var sceneView SceneView.lastActiveSceneView; var size new Vector2(sceneView.position.width,sceneView.position.height);

综合评价 | 基于层次-熵权-变异系数-正态云组合法的综合评价模型(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 综合评价 | 基于层次-熵权-变异系数-正态云组合法的综合评价模型&#xff08;Matlab&#xff09; AHP层次分析法是一种解决多目标复杂问题的定性和定量相结合进行计算决策权重的研究方法。该方法将定量分析与定性分析…

vscode中如何设置不显示隐藏文件

在vscode中&#xff0c;有时候&#xff0c;会显示一些隐藏文件&#xff0c;如何设置让其不显示呢&#xff1f; 解决办法 例如&#xff1a;我这里有一个.vscode隐藏文件夹&#xff0c;是vscode默认生成的一个配置目录&#xff0c;我想要它不在资源管理器中进行显示。 操作步骤&a…

Cesium 地球云图

Cesium 地球云图 使用自定义图原(Primitive)实现。 支持速度和透明的动态调整。 支持设置云图高度, 当相机高度小于云图高度时, 渐隐消失。 Cesium 地球云图

在 VS Code 中使用 Git 源代码管理【Mac 版】

文章目录 一、Git 使用文档二、使用示例1、复制远程仓库地址2、查看当前所在的分支2.1、界面查看2.2、终端查看 3、修改/新增文件4、显示增改的详细内容5、添加暂存区6、查看/取消暂存的更改7、提交本地代码库8、待提交文件9、推送到远程仓库10、验证11、查看推送记录11.1、关于…

全国大学生数学建模比赛——关联规则

一、问题背景与关联规则适用性 在数学建模比赛中&#xff0c;常常会遇到需要分析大量数据以寻找变量之间潜在关系的问题。关联规则分析作为一种数据挖掘技术&#xff0c;特别适用于这种场景。例如&#xff0c;在一些实际问题中&#xff0c;可能需要从众多的因素中找出哪些因素之…

Unet改进15:添加TripletAttention||减少冗余计算和同时存储访问

本文内容:在不同位置添加TripletAttention注意力机制 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 由于注意机制具有在通道或空间位置之间建立相互依赖关系的能力,近年来在各种计算机视觉任务中得到了广泛的研究和应用。在本文中,我们研究了轻量级但…

MAC环境导出项目的目录结构

一、安装Homebrew包管理工具 /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)" 官网网址&#xff1a;https://brew.idayer.com/ 二、用brew包管理工具安装tree brew install tree 三、打开终端&#xff0c;导出项目…

【机器学习】循环神经网络(RNN)介绍

引言 在现代人工智能(AI)和机器学习领域,循环神经网络(Recurrent Neural Networks, RNNs)作为一种能够处理序列数据的神经网络架构,已经成为众多应用的核心技术之一。RNNs的出现为处理时间序列数据和自然语言处理等任务提供了强大的工具,使得计算机能够理解和生成具有时…

NLP从零开始------16.文本中阶处理之序列到序列模型(1)

1. 序列到序列模型简介 序列到序列( sequence to sequence, seq2seq) 是指输入和输出各为一个序列(如一句话) 的任务。本节将输入序列称作源序列&#xff0c;输出序列称作目标序列。序列到序列有非常多的重要应用&#xff0c; 其中最有名的是机器翻译( machine translation), 机…

中仕公考怎么样?公务员考试什么时候补录?

公务员考试补录的时间和方法通常因地区和职位的不同有所区别&#xff0c;一般来说&#xff0c;这一过程会在面试、体检和考核环节完成后启动。 如果在招录过程中出现职位空缺或者并未全部招满的情况&#xff0c;就会进行补录。用人单位会通过其官方或公告形式公布相关信息&…

【数据结构】队列(Queue)

目录 队列概念 ​方法 队列模拟实现 链表实现队列 入队列 出队列 获取队头元素 数组实现队列 入队列 出队列 返回头队列 返回尾队列 完整代码 双链表实现队列 数组实现队列&#xff08;设计循环队列&#xff09; 队列概念 队列&#xff1a;只允许在一段进行插入…

鸿蒙HarmonyOS开发:如何灵活运用服务卡片提升用户体验

文章目录 一、ArkTS卡片相关模块二、卡片事件能力说明三、卡片事件的主要使用场景3.1、使用router事件跳转到指定UIAbility3.1.1、卡片内按钮跳转到应用的不同页面3.1.2、服务卡片的点击跳转事件 3.2、通过message事件刷新卡片内容3.2.1、在卡片页面调用postCardAction接口触发…

Linux 背景、命令

一、嵌入式、Linux背景 1、嵌入式&#xff1a; 硬件与软件相结合 定制、为硬件设计相关代码来进行操作&#xff0c;代码测试&#xff0c;烧进板子&#xff0c;通过语音、图像、按钮等操作方式来调用。 2、操作系统种类&#xff1a; Dos&#xff0c;Windows&#xff0c;Uni…