optim.Adam()

朋也透william 2024-10-05 14:01:02 阅读 100

torch.optim优化算法理解之optim.Adam()-CSDN博客

icon-default.png?t=N7T8

https://blog.csdn.net/kgzhang/article/details/77479737PyTorch优化算法:torch.optim.Adam 的参数详解和应用-CSDN博客

icon-default.png?t=N7T8

https://blog.csdn.net/weixin_51659315/article/details/135584252

<code>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表示没有正则化,即不对模型参数施加额外的惩罚。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。