用于优化模子的优化器和学习率调度器(scheduler)

打印 上一主题 下一主题

主题 867|帖子 867|积分 2601

定义了一个用于优化模子的优化器和学习率调度器(scheduler),并根据用户设置的参数 params 来决定具体的调度策略。

1. 定义优化器

  1. optimizer = optim.Adam(
  2.     model.parameters(), lr=params['init_lr'], weight_decay=params['weight_decay'])
复制代码


  • optim.Adam: 使用 Adam 优化器来更新模子的参数。

    • model.parameters(): 指定要优化的模子参数。
    • lr=params['init_lr']: 设置初始学习率为 params 字典中的值。
    • weight_decay=params['weight_decay']: 设置权重衰减(L2 正则化),防止过拟合。


2. 条件分支:是否使用调度器

分支 1: 使用 StepLR 学习率调度器

  1. if params['if_scheduler'] and not params['ReduceLROnPlateau']:
  2.     scheduler = optim.lr_scheduler.StepLR(
  3.         optimizer, step_size=params['step_size'], gamma=params['gamma'])
复制代码


  • 条件:

    • params['if_scheduler']: 是否使用学习率调度器。
    • not params['ReduceLROnPlateau']: 确保没有选择 ReduceLROnPlateau 调度器。

  • StepLR:

    • 每隔 step_size 个 epoch,学习率乘以一个因子 gamma,实现阶梯式的学习率衰减。
    • 参数说明:

      • step_size=params['step_size']: 每隔 step_size 个 epoch 触发一次学习率更新。
      • gamma=params['gamma']: 学习率衰减因子,例如 0.1 会使学习率减小到原来的 10%。



分支 2: 使用 ReduceLROnPlateau 调度器

  1. elif params['ReduceLROnPlateau']:
  2.     scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min',
  3.                                                      factor=params['lr_reduce_factor'],
  4.                                                      patience=params['lr_schedule_patience'],
  5.                                                      verbose=False)
复制代码


  • 条件:

    • params['ReduceLROnPlateau']: 使用 ReduceLROnPlateau 调度器。

  • ReduceLROnPlateau:

    • 根据验证集性能(如丧失或正确率)自动调解学习率,适用于训练早期较快下降、后期趋于安稳的情况。
    • 参数说明:

      • optimizer: 必要调解学习率的优化器。
      • mode='min': 监控的指标越小越好(例如丧失)。
      • factor=params['lr_reduce_factor']: 学习率缩放因子,通常设置为 0.1。
      • patience=params['lr_schedule_patience']: 如果指定个数的 epoch 内指标没有改善,则调解学习率。
      • verbose=False: 是否打印学习率调解信息。



分支 3: 不使用调度器

  1. else:
  2.     print("No scheduler")
  3.     scheduler = None
复制代码


  • 如果 params['if_scheduler'] 为 False,或者既未选择 StepLR 也未选择 ReduceLROnPlateau,则不使用调度器。
  • scheduler 设置为 None。

使用场景



  • StepLR: 在固定间隔降低学习率,适用于训练丧失缓慢下降的情况。
  • ReduceLROnPlateau: 在性能指标不再改善时调解学习率,适合动态调解。
  • 无调度器: 用于简单使命或学习率恒定的场景。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表