定义了一个用于优化模子的优化器和学习率调度器(scheduler),并根据用户设置的参数 params 来决定具体的调度策略。
1. 定义优化器
- optimizer = optim.Adam(
- 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 学习率调度器
- if params['if_scheduler'] and not params['ReduceLROnPlateau']:
- scheduler = optim.lr_scheduler.StepLR(
- 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 调度器
- elif params['ReduceLROnPlateau']:
- scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min',
- factor=params['lr_reduce_factor'],
- patience=params['lr_schedule_patience'],
- 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: 不使用调度器
- else:
- print("No scheduler")
- scheduler = None
复制代码
- 如果 params['if_scheduler'] 为 False,或者既未选择 StepLR 也未选择 ReduceLROnPlateau,则不使用调度器。
- scheduler 设置为 None。
使用场景
- StepLR: 在固定间隔降低学习率,适用于训练丧失缓慢下降的情况。
- ReduceLROnPlateau: 在性能指标不再改善时调解学习率,适合动态调解。
- 无调度器: 用于简单使命或学习率恒定的场景。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |