当前位置:网站首页>PyTorch(13)---优化器_随机梯度下降法
PyTorch(13)---优化器_随机梯度下降法
2022-08-02 14:07:00 【伏月三十】
优化器:随机梯度下降法
反向传播—梯度下降
import torch
import torchvision
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.data import DataLoader
dataset=torchvision.datasets.CIFAR10("dataset_CIFAR10",train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader=DataLoader(dataset,batch_size=1)
class Demo(nn.Module):
def __init__(self) -> None:
super().__init__()
self.model1=Sequential(
Conv2d(in_channels=3, out_channels=32, kernel_size=5, stride=1, padding=2, dilation=1, ),
MaxPool2d(kernel_size=2, ),
Conv2d(in_channels=32, out_channels=32, kernel_size=5, stride=1, padding=2, ),
MaxPool2d(kernel_size=2),
Conv2d(32, 64, 5, 1, 2),
MaxPool2d(2),
Flatten(),
Linear(1024, 64),
Linear(64, 10),
)
def forward(self,x):
x=self.model1(x)
return x
demo=Demo()
loss=nn.CrossEntropyLoss()
'''优化器:随机梯度下降'''
optim=torch.optim.SGD(params=demo.parameters(),lr=0.01,)
for epoch in range(20):#通常训练很多轮
running_loss=0.0
for data in dataloader:
imgs,targets=data
'''送入网络进行训练'''
outputs=demo(imgs)
'''损失函数'''
result_loss=loss(outputs,targets)
'''优化器进行调优 1、调用一个优化器:optim=torch.optim.SGD(params=demo.parameters(),lr=0.01,) 2、将梯度初始化为0,在循环里这一步都要清0 3、损失函数调用反向传播 4、optim.step() '''
optim.zero_grad()#首先将梯度设置为0
result_loss.backward()#反向传播,算出梯度(梯度下降法),目的:求出最小的loss 得到需要调节的梯度
optim.step()
running_loss=running_loss+result_loss#在每一轮开始之前,将loss都设置为0,整体误差的总和
#print(result_loss)
print(running_loss)
边栏推荐
猜你喜欢
随机推荐
华为防火墙
DataX 的使用
没学好统计学的下场
使用flutter小记
AAPT: error: duplicate value for resource ‘attr/xxx‘ with config ‘‘, file failed to compile.
PostgreSQL 性能谜题
Redis持久化机制
拥抱Jetpack之印象篇
5.使用RecyclerView优雅的实现瀑布流效果
绕过正则实现SQL注入
Cannot figure out how to save this field into database. You can consider adding a type converter for
LLVM系列第六章:函数返回值Return
华为防火墙IPS
NDK报错问题分析方案(一)
Flink实现Exactly Once
Enhanced Apktool reverse artifact
二进制乘法运算
循环神经网络RNN 之 LSTM
统计偏科最严重的前100名学生
内存申请(malloc)和释放(free)之下篇