PyTorch:简单的前馈神经网络不是 运行 没有 retain_graph=True
PyTorch: Simple feedforward neural network not running without retain_graph=True
下面是我训练前馈神经网络 (FFNN) 的代码。
标签是 0 到 50 之间的数字。FFNN 由一个包含 50 个神经元的隐藏层和一个包含 51 个神经元的输出层组成。此外,我使用了负对数似然损失。
我是 PyTorch 的新手,所以我使用了几个网站作为指导。奇怪的是,其中 none 需要将 retain_graph 设置为 True(它们在调用 backward()
时不传递任何参数)。此外,它运行非常缓慢,准确度似乎在固定值附近波动而不是降低。
假设输入的格式是正确的,有人可以向我解释为什么网络表现如此糟糕以及为什么网络需要 retain_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()
下面是我训练前馈神经网络 (FFNN) 的代码。
标签是 0 到 50 之间的数字。FFNN 由一个包含 50 个神经元的隐藏层和一个包含 51 个神经元的输出层组成。此外,我使用了负对数似然损失。
我是 PyTorch 的新手,所以我使用了几个网站作为指导。奇怪的是,其中 none 需要将 retain_graph 设置为 True(它们在调用 backward()
时不传递任何参数)。此外,它运行非常缓慢,准确度似乎在固定值附近波动而不是降低。
假设输入的格式是正确的,有人可以向我解释为什么网络表现如此糟糕以及为什么网络需要 retain_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()