PyTorch:简单的前馈神经网络在没有keep_graph = True的情况下无法运行

问题描述 投票:0回答:1

以下是我用于训练前馈神经网络(FFNN)的代码。

标签是介于0到50之间的数字。FFNN包含一个包含50个神经元的隐藏层和一个包含51个神经元的输出层。此外,我使用了负对数似然损失。

我是PyTorch的新手,所以我使用了两个网站作为指导。奇怪的是,它们都不要求将keep_graph设置为True(在调用backward()时,它们不传递任何参数)。此外,它运行非常缓慢,精度似乎在固定值附近波动而不是降低。

假设输入的格式正确,有人可以向我解释为什么网络性能这么差,为什么网络要求将keep_graph设置为True?

非常感谢!

n_epochs = 2
batch_size = 100
for epoch in range(n_epochs):
    permutation = torch.randperm(training_set.size()[0])
    for i in range(0, training_set.size()[0], batch_size):
        opt.zero_grad()
        indices = permutation[i:i + batch_size]
        batch_features = training_set[indices]
        batch_labels = torch.LongTensor([label for label, sent in train[indices]])
        batch_outputs = model(batch_features)
        loss = loss_function(batch_outputs, batch_labels)
        loss.backward(retain_graph=True)
        opt.step()
python debugging pytorch backpropagation loss-function
1个回答
1
投票

您缺少.zero_grad()操作。将其添加到循环中,无需retain_graph= True,您的代码即可正常工作。

loss.backward()
opt.step()
opt.zero_grad()
© www.soinside.com 2019 - 2024. All rights reserved.