python-3.x - 在 PyTorch 中训练具有多个学习率的模型
问题描述
我是 PyTorch 的新手,并且已经习惯了一些概念。
我需要训练一个神经网络。为了优化,我需要使用具有 4 种不同的 Adam 优化器learning rates = [2e-5, 3e-5, 4e-5, 5e-5]
优化器函数定义如下
def optimizer(no_decay = ['bias', 'gamma', 'beta'], lr=2e-5):
param_optimizer = list(model.named_parameters())
optimizer_grouped_parameters = [
{'params': [p for n, p in param_optimizer if not any(nd in n for nd in no_decay)],
'weight_decay_rate': 0.01},
{'params': [p for n, p in param_optimizer if any(nd in n for nd in no_decay)],
'weight_decay_rate': 0.0}
]
# This variable contains all of the hyperparemeter information our training loop needs
optimizer = BertAdam(optimizer_grouped_parameters, lr, warmup=.1)
return optimizer
如何确保优化器使用我指定的一组学习率并返回最佳模型?
在训练期间,我们使用如下优化器,但我看不出有办法告诉它尝试不同的学习率
def model_train():
#other code
# clear out the gradient
optimizer.zero_grad()
# Forward pass
loss = model(b_input_ids, token_type_ids=None, attention_mask=b_input_mask, labels=b_labels)
train_loss_set.append(loss.item())
# Backward pass
loss.backward()
# Update parameters and take a step using the computed gradient
optimizer.step()
我知道optimizer.step()
内部会逐步优化渐变。但是如何确保优化器尝试我指定的一组学习率并将最佳模型返回给我?
请建议。
解决方案
如果你想用四种不同的学习率训练四次,然后进行比较,你不仅需要 4 次,还需要 4 次optimizer
:model
使用不同的学习率(或任何其他元参数)会产生不同的权重轨迹高维“参数空间”。也就是说,经过几步之后,不仅是模型之间的学习率,还有训练后的权重本身——这就是产生模型之间实际差异的原因。
因此,您需要使用 4个不同学习率 model
的实例训练 4 次。optimizer
推荐阅读
- go - 为什么 VS Code 将循环后的代码标记为不可访问?
- python - 带背景减法的手形光标控制器
- google-sheets - 如果满足 2 个条件,则计数字符串出现
- python-3.x - 如何在基于 django 的站点中检查多个网站的 ping 响应?
- android - Sum 在 Kotlin 中给出一个负数
- flutter - 添加颜色过渡
- sql-server - 如何执行命令:在 Spark/Databricks 的 SQL Server 表上设置 IDENTITY_INSERT ON?
我已经能够使用 JDBC 驱动程序从 Databricks 读取/写入 SQL Server 表。但是这次我必须在写入 SQL Server 之前执行一个命令。我需要在 SQL 服务器上执行此命令: SET IDENTITY_INSERT <sqlserver_table_name> ON 如何从 Databricks 执行此操作?任
- python - 如何从熊猫数据框创建嵌套字典?
- flutter - 为什么我的分隔线缩进在不同的设备上不同?
- javascript - 通过 graphql 从 postgresql 获取产品销售报告