Ниже приведен мой код для обучения нейронной сети с прямой связью (FFNN).
Метки - это числа от 0 до 50. FFNN состоит из одного скрытого слоя с 50 нейронами и выходного слоя с 51 нейроном. Кроме того, я использовал потерю вероятности с отрицательным логарифмическим индексом.
Я очень плохо знаком с PyTorch, поэтому для руководства я использовал несколько веб-сайтов. Странно то, что ни один из них не требует, чтобы для 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()