优化器
介绍¶
优化器这里还是详细说一下吧。
每个优化器具体参数都不太一样,但是一般都用默认值,只传参数和学习率就ok了。
学习率不要太大,0.01好一些。
loss = nn.CrossEntropyLoss() # 定义损失函数
tudui = Tudui()
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
outputs = tudui(imgs)
# print(outputs)
# print(targets)
result_loss = loss(outputs, targets) # 调用损失函数
optim.zero_grad()
result_loss.backward() # 反向传播, 这里要注意不能使用定义损失函数那里的 loss,而要使用 调用损失函数之后的 result_loss
optim.step()
# print("OK") # 这部分,在debug中可以看到 grad 通过反向传播之后,才有值,debug修好了之后,再来看这里
# print(result_loss)
running_loss = running_loss + result_loss
print(running_loss)
反向传播后,优化器进行优化,记得先清零梯度。