torch.optim优化算法理解之optim.Adam()-CSDN博客https://blog.csdn.net/kgzhang/article/details/77479737PyTorch优化算法:torch.optim.Adam 的参数详解和应用-CSDN博客https://blog.csdn.net/weixin_51659315/article/details/135584252
optim.Adam
是 PyTorch 中一种非常流行的优化器,它是 Adam(Adaptive Moment Estimation)优化算法的实现。Adam 优化器结合了动量优化和 RMSProp 的优点,以提高训练深度学习模型的效率和效果。
optim.Adam
的用法
基本语法:
torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, amsgrad=False)
参数说明:
params
:模型的参数(通常是model.parameters()
)。lr
:学习率(learning rate),默认值为 0.001。betas
:用于计算梯度和梯度平方的指数加权平均的系数,默认值为 (0.9, 0.999)。eps
:防止除以零的数值稳定常数,默认值为 1e-08。weight_decay
:权重衰减(L2 正则化),默认值为 0。amsgrad
:是否使用 AMSGrad 修正(一个改进版本的 Adam),默认值为 False。
示例代码
import torch
import torch.nn as nn
import torch.optim as optim
# 定义一个简单的神经网络
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(10, 50)
self.fc2 = nn.Linear(50, 1)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
# 初始化模型
model = SimpleNN()
# 定义损失函数
criterion = nn.MSELoss()
# 定义优化器
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 示例训练步骤
for epoch in range(100): # 训练 100 个 epoch
# 假设输入和目标数据
inputs = torch.randn(16, 10) # 16 个样本,每个样本 10 维
targets = torch.randn(16, 1) # 16 个样本,每个样本 1 维目标
# 清零梯度
optimizer.zero_grad()
# 前向传播
outputs = model(inputs)
# 计算损失
loss = criterion(outputs, targets)
# 反向传播
loss.backward()
# 更新参数
optimizer.step()
# 打印损失值
print(f'Epoch {epoch+1}, Loss: {loss.item()}')
解释
- 定义模型:我们定义了一个简单的神经网络
SimpleNN
。 - 定义损失函数:使用均方误差损失函数
nn.MSELoss
。 - 定义优化器:使用
optim.Adam
,传入模型参数和学习率。 - 训练循环: - 清零梯度(
optimizer.zero_grad()
)。- 执行前向传播(model(inputs)
)。- 计算损失(criterion(outputs, targets)
)。- 反向传播(loss.backward()
)。- 更新参数(optimizer.step()
)。
optim.Adam
通过调整每个参数的学习率来加速训练过程,并且能够在训练过程中适应不同参数的更新幅度,使得模型更容易收敛。
实例参数解析
amsgrad: False
betas: (0.9, 0.999)
eps: 1e-08
lr: 0.001
weight_decay: 0
这些参数是用于设置优化器(通常是Adam或AdamW)在训练深度学习模型时的配置。
- amsgrad: False- amsgrad 是Adam优化器的一种变体的一个参数,用于决定是否使用AMSGrad变体。AMSGrad是一种改进版的Adam优化器,旨在提高收敛性和训练稳定性。设置为
False
意味着正在使用标准的Adam优化器而不是AMSGrad变体。 - **betas: (0.9, 0.999) **- betas 是Adam优化器中的两个超参数,用于控制一阶和二阶矩估计的指数衰减率。第一个值(0.9)用于一阶矩(梯度的均值)的衰减,第二个值(0.999)用于二阶矩(梯度的平方的均值)的衰减。这两个值决定了优化器对历史梯度的记忆程度。较小的值使优化器对最近的梯度变化更加敏感。
- eps: 1e-08- eps 是一个小的常数,用于避免在计算过程中出现除零错误。在Adam优化器中,它用于稳定数值计算,确保在计算更新时不会因分母过小而导致数值不稳定。
1e-08
表示0.00000001,通常是一个很小的值,用于避免数值问题。 - lr: 0.001- lr 代表学习率(Learning Rate),是优化器的一个关键超参数,用于控制每次更新的步幅。较大的学习率可能会导致训练不稳定,而较小的学习率可能会导致训练过程缓慢。
0.001
是一个常见的初始值,表示每次更新时参数会根据梯度的大小调整0.001的步幅。 - weight_decay: 0- weight_decay 是用于L2正则化的一个参数,帮助防止过拟合。它通过在损失函数中添加一个惩罚项来控制模型的复杂度。
weight_decay
的值决定了正则化的强度。0
表示没有正则化,即不对模型参数施加额外的惩罚。
版权归原作者 朋也透william 所有, 如有侵权,请联系我们删除。