PyTorch快速入门教程【小土堆】-神经网络-优化器

1.TORCH.OPTIM 

torch.optim — PyTorch 1.11.0 documentation

(1)如何用优化器

举例如下:

a.构造优化器

optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)#模型的参数、lr学习速率

b.调用优化器的step方法

for input, target in dataset:
    optimizer.zero_grad()#一定要做的,梯度清零,防止之前梯度的影响
    output = model(input)
    loss = loss_fn(output, target)#计算误差
    loss.backward()#反向传播,得到每个参数对应的梯度
    optimizer.step()#每个参数根据上一步的梯度做优化

c.算法

具体参考官方文档:torch.optim — PyTorch 1.11.0 documentation

(2)代码示例

import torch
import torchvision.datasets
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear
from torch.utils.data import DataLoader
#加载数据集
dataset=torchvision.datasets.CIFAR10("dataset",train=False,transform=torchvision.transforms.ToTensor(),download=True)

dataloader=DataLoader(dataset,batch_size=1)
#网络
class Tudui(nn.Module):
    def __init__(self) -> None:
        super().__init__()
        self.modul1=nn.Sequential(
            Conv2d(3, 32, 5, 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.modul1(x)
        return x


loss=nn.CrossEntropyLoss()
tudui=Tudui()
#优化器:随机梯度下降
#学习速率不能设置太大,也不能设置太小,太大 模型不稳定 太小 模型训练速度慢,一般情况下
#一开始采用学习速率较大的来进行学习,后面采用学习速率较小的来学习
#1.定义优化器
optim=torch.optim.SGD(tudui.parameters(),lr=0.01)
for epoch in range(20):#进行一轮一轮的训练
    running_loss=0.0
    for data in dataloader:
        imgs,targets=data
        output=tudui(imgs)
        result_loss=loss(output,targets)#计算误差
        #2.梯度清零
        optim.zero_grad()
        #3.反向传播计算梯度
        result_loss.backward()
        #4.对每个参数进行调优
        optim.step()
        running_loss=running_loss+result_loss
    print(running_loss)

你可能感兴趣的:(pytorch,神经网络,深度学习)