(十三)优化器

本文详细介绍了如何在PyTorch中使用torch.optim模块创建优化器,如SGD,以及如何执行step()方法进行参数更新和zero_grad()方法清零梯度。通过CIFAR10数据集的实例,展示了反向传播前后的梯度检查和随机梯度下降优化过程。
摘要由CSDN通过智能技术生成

1. torch.optim介绍

1.1 如何创建优化器

在这里插入图片描述

1.2 step()方法和zero_grad()方法

在这里插入图片描述

2.代码实战

from torch import nn, optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader


class My_Module(nn.Module):
    def __init__(self, *args, **kwargs) -> None:
        super().__init__(*args, **kwargs)
        self.seq = nn.Sequential(
            nn.Conv2d(in_channels=3, out_channels=32, kernel_size=5, padding=2),
            nn.MaxPool2d(kernel_size=2),
            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=5, padding=2),
            nn.MaxPool2d(kernel_size=2),
            nn.Conv2d(in_channels=32, out_channels=64, kernel_size=5, padding=2),
            nn.MaxPool2d(kernel_size=2),
            nn.Flatten(),
            nn.Linear(in_features=1024, out_features=64),
            nn.Linear(in_features=64, out_features=10)
        )

    def forward(self, x):
        output = self.seq(x)
        return output


my_module = My_Module()
loss = nn.CrossEntropyLoss()  # 定义损失函数
optimizer = optim.SGD(params=my_module.parameters(), lr=0.01)  # 定义优化器,采用随机梯度下降算法
test_dataset = datasets.CIFAR10(root="datasets", transform=transforms.ToTensor(), download=True)
test_dataloader = DataLoader(dataset=test_dataset, batch_size=1, shuffle=True, drop_last=False)
for data in test_dataloader:
    imgs, targets = data
    output = my_module(imgs)
    result_loss = loss(output, targets)
    optimizer.zero_grad()  # 将模型的上一轮梯度清零,防止对本轮梯度优化产生影响
    result_loss.backward()
    optimizer.step()  # 通过随机梯度下降算法优化模型的梯度

3.代码调试

3.1反向传播前模型梯度

在这里插入图片描述

3.2反向传播后模型梯度

在这里插入图片描述

3.3随机梯度下降优化后

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值