首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MNIST上SGD+momentum v/s SGD的误差比较

MNIST上SGD+momentum v/s SGD的误差比较
EN

Stack Overflow用户
提问于 2022-01-12 03:31:38
回答 1查看 34关注 0票数 0

我正在从事一个玩具项目,以比较SGD和SGD+momentum优化器在MNIST数据上的性能。为此,我创建了两个单元格块,一个用于SGD:

代码语言:javascript
复制
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0)
for epoch in range(10):

    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data
        optimizer.zero_grad()

        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        running_loss += loss.item()
        if i % 2000 == 1999:
            print('[%d, %5d] loss: %.3f' %
                  (epoch + 1, i + 1, running_loss / 2000))
            running_loss = 0.0

新交所10期后的损失:损失: 0.674

然后,我为SGD+momentum创建了另一个单元:

代码语言:javascript
复制
sgd_momentum = optim.SGD(net.parameters(), lr=0.001, momentum=0.7)

for epoch in range(10):
    #similar as in SGD, just replace the optimizer

我面临的问题是,SGD+momentum正试图从SGD停止的那一刻开始优化。这是第一批小型车的损失,划时代1:

1,2000年损失: 0.506

如何确保SGD+momentum接受最初的损失?我不明白这是什么原因。

EN

回答 1

Stack Overflow用户

发布于 2022-01-12 05:03:37

在PyTorch中,一旦使用了optim.step(),权重优化就自动开始(前提是没有设置其他标志)。

在使用第二个优化器之前调用model = model() / Net()是可行的,因为它重新初始化了网络

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70676004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档