pytorch adam优化器参数
时间: 2025-05-13 10:56:40 浏览: 25
### PyTorch 中 Adam 优化器的参数及其用法
PyTorch 的 `torch.optim` 模块提供了多种优化算法,其中 Adam 是一种常用的自适应学习率优化方法。以下是关于 Adam 优化器的关键参数以及如何在实际场景中使用它的详细介绍。
#### 关键参数说明
Adam 优化器的核心参数包括但不限于以下几个:
1. **lr (Learning Rate)**
学习率控制每次迭代中的步长大小,默认值为 `0.001`。它决定了模型权重更新的速度。较小的学习率可能导致收敛缓慢,而较大的学习率可能使损失函数不稳定甚至发散[^2]。
2. **betas**
这是一个元组 `(beta1, beta2)`,用于计算梯度的一阶矩估计和二阶矩估计的指数衰减率。默认值通常设置为 `(0.9, 0.999)`。这些值影响动量项和平滑梯度的效果。
3. **eps (Epsilon)**
小常数,用来防止除零错误并提高数值稳定性,默认值为 `1e-8`。
4. **weight_decay**
权重衰减系数(L2 正则化),默认值为 `0`。通过增加正则化可以有效减少过拟合的风险。
5. **amsgrad**
是否启用 AMSGrad 变体,默认为 `False`。AMSGrad 修改了原始 Adam 方法,在某些情况下能够提供更好的性能。
#### 使用示例
下面展示了一个典型的 Adam 优化器实例化的代码片段,并演示了如何将其应用于神经网络训练过程。
```python
import torch
from torch import nn
from torch.optim import Adam
# 定义简单的全连接层网络作为示例
model = nn.Sequential(
nn.Linear(10, 5),
nn.ReLU(),
nn.Linear(5, 1)
)
# 设置初始学习率为 0.001 并应用 L2 正则化
optimizer = Adam(model.parameters(), lr=0.001, weight_decay=1e-5)
# 训练循环伪代码
for epoch in range(num_epochs):
for data, target in dataloader:
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step() # 更新模型参数
```
上述代码展示了如何定义一个基本的线性回归模型,并利用 Adam 优化器对其进行训练。注意调用了 `zero_grad()` 清空之前累积的梯度;随后执行反向传播操作 (`loss.backward()`) 和参数更新 (`optimizer.step()`)。
#### 复杂情况下的分组管理
当面对复杂的多模块架构时,可以通过参数分组来实现更精细的调整策略。例如,对于预训练好的 BERT 层和其他新增加的部分采用不同学习速率的情况如下所示:
```python
params = [
{"params": [p for n, p in model.named_parameters() if "bert" not in n]},
{"params": [p for n, p in model.named_parameters() if "bert" in n], 'lr': 2e-5}
]
optimizer = Adam(params, lr=0.001) # 默认学习率仅适用于未特别指定部分
```
这里我们将整个网络划分为两个子集——非BERT组件沿用标准配置即 `lr=0.001` 而含BERT字样的那些层则被赋予更低水平的学习速度以保护已有的知识迁移成果[^4]。
---
阅读全文
相关推荐




















