以下是我用于训练前馈神经网络(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()
您缺少.zero_grad()
操作。将其添加到循环中,无需retain_graph= True
,您的代码即可正常工作。
loss.backward()
opt.step()
opt.zero_grad()