torch.optim详解

torch.optim 是 PyTorch 中的优化器模块,它提供了一系列用于训练神经网络的优化算法。优化器通过调整模型参数的学习率来最小化损失函数。

常用优化器
以下是 torch.optim 中一些常用的优化器:

SGD (随机梯度下降)

optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

参数:
params: 待优化的参数。
lr: 学习率。
momentum: 动量因子。
dampening: 动量阻尼。
weight_decay: 权重衰减(L2惩罚)。
nesterov: 使用Nesterov动量。
Adam (自适应矩估计)

optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

参数:
params: 待优化的参数。
lr: 学习率。
betas: 用于计算梯度和梯度平方的运行平均值的系数(默认值为 (0.9, 0.999))。
eps: 为了数值稳定性添加的小量(默认值为 1e-8)。
weight_decay: 权重衰减(L2惩罚)。

RMSprop

optimizer = torch.optim.RMSprop(model.parameters(), lr=0.01)

参数:
params: 待优化的参数。
lr: 学习率。
alpha: 平滑常数。
eps: 为了数值稳定性添加的小量。
weight_decay: 权重衰减(L2惩罚)。
momentum: 动量因子。
centered: 是否计算去中心化的二阶矩。

Adagrad

optimizer = torch.optim.Adagrad(model.parameters(), lr=0.01)

参数:
params: 待优化的参数。
lr: 学习率。
lr_decay: 学习率衰减。
weight_decay: 权重衰减(L2惩罚)。
常见方法
每个优化器都提供了一些常见的方法:

zero_grad():

清除所有被优化参数的梯度。

optimizer.zero_grad()

step():

执行单次优化步骤(参数更新)。

optimizer.step()

state_dict():

返回优化器的状态字典,用于保存和加载优化器状态。

optimizer_state = optimizer.state_dict()

load_state_dict(state_dict):

加载优化器的状态字典。

optimizer.load_state_dict(optimizer_state)

使用示例
以下是一个完整的示例,展示如何使用 torch.optim 模块训练一个简单的神经网络:

import torch
import torch.nn as nn
import torch.optim as optim

# 定义一个简单的神经网络
class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.fc = nn.Linear(10, 2)
    
    def forward(self, x):
        return self.fc(x)

# 初始化网络和优化器
model = SimpleNet()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 损失函数
criterion = nn.CrossEntropyLoss()

# 模拟训练数据
inputs = torch.randn(32, 10)
targets = torch.randint(0, 2, (32,))

# 训练步骤
for epoch in range(10):
    optimizer.zero_grad()  # 清除梯度
    outputs = model(inputs)  # 前向传播
    loss = criterion(outputs, targets)  # 计算损失
    loss.backward()  # 反向传播
    optimizer.step()  # 更新参数

    print(f"Epoch {epoch+1}, Loss: {loss.item()}")

在这个示例中,我们定义了一个简单的神经网络,使用 Adam 优化器来优化模型参数,并在每个训练周期中执行前向传播、计算损失、反向传播和参数更新。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值