【学习笔记】【Pytorch】13.优化器

【学习笔记】【Pytorch】13.优化器

  • 一、优化器
  • 二、例子

一、优化器

参考
优化器(Optimizer)
torch.optim

二、例子

使用SGD优化器,观察每一轮epoch后损失的变化。

import torch
import torchvision
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter


class Model(nn.Module):
    def __init__(self) -> None:
        super().__init__()  # 初始化父类属性
        self.model1 = Sequential(
            Conv2d(3, 32, 5, stride=1, padding=2),
            MaxPool2d(2),
            Conv2d(32, 32, 5, padding=2),
            MaxPool2d(2),
            Conv2d(32, 64, 5, padding=2),
            MaxPool2d(2),
            Flatten(),
            Linear(1024, 64),
            Linear(64, 10)
        )

    def forward(self, x):
        x = self.model1(x)
        return x


dataset = torchvision.datasets.CIFAR10(root="./dataset", train=False,
                                       transform=torchvision.transforms.ToTensor(),
                                       download=True)
dataloader = DataLoader(dataset, batch_size=64)

loss = nn.CrossEntropyLoss()  # 交叉熵
model = Model()  # 创建一个实例
optim = torch.optim.SGD(model.parameters(), lr=0.01)  # 一开始选择较大的学习率,后面才选择较小的学习率
for epoch in range(20):
    running_loss = 0.0
    for data in dataloader:
        imgs, targets = data
        output = model(imgs)
        result_loss = loss(output, targets)  # 计算每个参数对应的损失
        optim.zero_grad()  # 每个参数对应的梯度清零
        result_loss.backward()  # 反向传播,计算每个参数对应的梯度
        optim.step()  # 每个参数根据上一步得到的梯度进行优化
        running_loss += result_loss
    print(running_loss)

输出

Files already downloaded and verified
tensor(360.8050, grad_fn=)
tensor(357.3649, grad_fn=)
tensor(347.6952, grad_fn=)

可以看出每一个epoch后损失在下降。

你可能感兴趣的:(Pytorch,pytorch,学习,深度学习)