SGD、Adam

简介: 【9月更文挑战第23天】

在深度学习中,optimizer.zero_grad() 是一个非常重要的步骤,它用于在每次迭代开始前清除(重置)模型参数的梯度。这是因为大多数优化算法(如SGD、Adam等)都是基于梯度的,它们需要在每次参数更新后清零梯度,以避免梯度累积。

为什么需要 optimizer.zero_grad()

在训练神经网络时,我们使用反向传播算法来计算每个参数的梯度。这些梯度表示损失函数相对于每个参数的敏感度,告诉我们应该如何调整参数以最小化损失。在每次迭代中,我们根据这些梯度来更新参数。

如果不在每次迭代前清零梯度,梯度将会累积,即新的梯度会加到旧的梯度上。这会导致错误的更新,因为每次更新应该只基于当前迭代计算的梯度。

如何使用 optimizer.zero_grad()

在使用PyTorch等深度学习框架时,optimizer.zero_grad() 通常在每次训练迭代的开始被调用。以下是一个简单的训练循环示例,展示了如何在PyTorch中使用它:

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

# 定义一个简单的模型
model = nn.Sequential(
    nn.Linear(10, 5),
    nn.ReLU(),
    nn.Linear(5, 1)
)

# 定义损失函数
loss_fn = nn.MSELoss()

# 定义优化器
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 假设有一些训练数据
inputs = torch.randn(5, 10)
targets = torch.randn(5, 1)

# 训练循环
for epoch in range(5):
    # 清除梯度
    optimizer.zero_grad()

    # 前向传播
    outputs = model(inputs)

    # 计算损失
    loss = loss_fn(outputs, targets)

    # 反向传播
    loss.backward()

    # 参数更新
    optimizer.step()

    # 打印损失
    print(f'Epoch {epoch+1}, Loss: {loss.item()}')

在这个例子中,我们首先定义了一个简单的线性模型、损失函数和优化器。在训练循环中,我们使用 optimizer.zero_grad() 来清除梯度,然后进行前向传播、计算损失、反向传播和参数更新。

代码解释:

  • optimizer.zero_grad(): 清除模型参数的梯度。
  • loss.backward(): 计算梯度,这是通过反向传播自动完成的。
  • optimizer.step(): 根据计算得到的梯度更新模型参数。
目录
相关文章
|
30天前
|
机器学习/深度学习 存储 自然语言处理
Adam介绍
【10月更文挑战第3天】
|
机器学习/深度学习
Hinge Loss 和 Zero-One Loss
Hinge Loss 和 Zero-One Loss
161 0
|
机器学习/深度学习 数据挖掘 PyTorch
Softmax Classifier 多分类问题
Softmax Classifier 多分类问题
99 0
|
机器学习/深度学习 PyTorch 算法框架/工具
深入理解二分类和多分类CrossEntropy Loss和Focal Loss
多分类交叉熵就是对二分类交叉熵的扩展,在计算公式中和二分类稍微有些许区别,但是还是比较容易理解
1386 0
|
机器学习/深度学习 自然语言处理 算法
深度学习基础入门篇[三]:优化策略梯度下降算法:SGD、MBGD、Momentum、Adam、AdamW
深度学习基础入门篇[三]:优化策略梯度下降算法:SGD、MBGD、Momentum、Adam、AdamW
深度学习基础入门篇[三]:优化策略梯度下降算法:SGD、MBGD、Momentum、Adam、AdamW
|
机器学习/深度学习 PyTorch 算法框架/工具
pytorch实现基本的logistic和softmax回归实验(手动+torch)
pytorch实现基本的logistic和softmax回归实验(手动+torch)
307 0
|
机器学习/深度学习 人工智能 算法
Adam 优化算法详解
Adam 优化算法详解
348 0
Adam 优化算法详解
|
算法 TensorFlow 算法框架/工具
TensorFlow 常用优化器:GradientDescent、Momentum、Adam
TensorFlow 常用优化器:GradientDescent、Momentum、Adam
TensorFlow 常用优化器:GradientDescent、Momentum、Adam
|
机器学习/深度学习 PyTorch 算法框架/工具
【26】pytorch中的grad求导说明以及利用backward获取梯度信息
【26】pytorch中的grad求导说明以及利用backward获取梯度信息
416 0
【26】pytorch中的grad求导说明以及利用backward获取梯度信息