Я пытаюсь реализовать нейронную сеть с помощью оптимизатора LBFGS.Вот мой код
model2 = torch.nn.Sequential()
# ANN with layer 122 -> 25 -> 2
model2.add_module("input_layer", torch.nn.Linear(D, 25))
model2.add_module("relu1", torch.nn.ReLU())
model2.add_module("hidden_layer", torch.nn.Linear(25, K))
model2.add_module("output", torch.nn.Sigmoid())
loss2 = torch.nn.BCEWithLogitsLoss()
optimizer2 = optim.LBFGS(model2.parameters())
Когда я использую мини-партии и пытаюсь напечатать стоимость и точность, я получаю одинаковые точные значения для каждой партии.(Я изменил оптимизатор и заметил, что значения меняются в зависимости от используемой мини-партии).Но когда я изменил размер партии на длину данных поезда (полная партия), я заметил, что модель значительно улучшилась.Являются ли алгоритмы LBFGS полной пакетной обработки в pytorch?
Мой второй вопрос касается функции стоимости и функции окончательной активации.Как видите, я использовал torch.nn.BCEWithLogitsLoss (), который объединяет слой Sigmoid и BCELoss в одном классе.По ошибке я добавил слой Sigmoid в свою модель и заметил, что модель работает немного быстрее, чем я ожидал (потому что я знаю, что LBFGS немного медленны).Но я закомментировал строку model2.add_module("output", torch.nn.Sigmoid())
, на этот раз код работает медленнее (обычно медленный х), когда я использую LBFGS).Почему это?я должен сохранить последнюю строку или удалить ее?
РЕДАКТИРОВАТЬ
Вот копия моего кода для обучения
print("Training neural network...")
# main training loop
for i in range(epochs):
cost = 0
val_cost = 0
for xb,yb in train_dl:
cost += train(model2, loss2, optimizer2, xb, yb, True)
train_acc = my_score(model2, Xtrain, Ytrain)
val_acc = my_score(model2, Xval, Yval)
val_cost = get_cost(model2, loss2, Xval, Yval)
print("Epoch: %d, cost: %f, acc: %.4f" % (i, val_cost, val_acc))
# for plotting
train_costs2.append(cost / len(train_dl))
train_accuracies2.append(train_acc)
validation_costs2.append(val_cost)
validation_accuracies2.append(val_acc)
print("Training is done")
Вотвывод.
Training neural network...
Epoch: 0, cost: 0.693148, acc: 0.5398
Epoch: 1, cost: 0.693148, acc: 0.5398
Epoch: 2, cost: 0.693148, acc: 0.5398
Epoch: 3, cost: 0.693148, acc: 0.5398
Epoch: 4, cost: 0.693148, acc: 0.5398
Epoch: 5, cost: 0.693148, acc: 0.5398
Epoch: 6, cost: 0.693148, acc: 0.5398
Epoch: 7, cost: 0.693148, acc: 0.5398
Epoch: 8, cost: 0.693148, acc: 0.5398
Epoch: 9, cost: 0.693148, acc: 0.5398
Epoch: 10, cost: 0.693148, acc: 0.5398
Epoch: 11, cost: 0.693148, acc: 0.5398
Epoch: 12, cost: 0.693148, acc: 0.5398
Epoch: 13, cost: 0.693148, acc: 0.5398
Epoch: 14, cost: 0.693148, acc: 0.5398
Training is done
Как видите, значения одинаковы в каждой эпохе.(Я знаю, что моя модель не очень хорошо)