后向传播梯度下降:
import torch.optim import torchvision from torch import nn from torch.nn import Sequential,Conv2d,MaxPool2d,Flatten,Linear from torch.utils.data import DataLoader dataset=torchvision.datasets.CIFAR10("cifar-10-python",train=False,transform=torchvision.transforms.ToTensor(), download=True) dataloader=DataLoader(dataset,batch_size=1) class Model(nn.Module): def __init__(self): super(Model,self).__init__() self.model1=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.model1(x) return x #原网络 loss=nn.CrossEntropyLoss()//交叉熵 model=Model() optim=torch.optim.SGD(model.parameters(),lr=0.01)//定义学习速率0.01,用网络的参数 for epoch in range(20): running_loss=0.0 for data in dataloader: imgs,targets=data outputs=model(imgs) result_loss=loss(outputs,targets)//计算交叉熵 optim.zero_grad()//优化器 result_loss.backward()//后向传播 optim.step() result_loss+=result_loss print(result_loss)