В чем разница между этими двумя кодами для вывода на примере toy MNIST

#pytorch #mnist

#pytorch #mnist

Вопрос:

Я обнаружил, что между этими двумя кодами разные значения точности. Я думаю, что это одни и те же коды, но дают разные значения. Почему результаты двух кодов отличаются?

[код 1 ]

 def mytest(model, data_loader):
    with torch.no_grad():
        corrected_sample = 0
        for x_test, y_test in data_loader:
            x_test, y_test = x_test.to(device), y_test.to(device)
            x_test = x_test.view(-1,28*28).float()
            prediction = model(x_test)
            #predicted_class = prediction.max(1)[1]
            predicted_class = torch.argmax(prediction, 1)
            corrected_sample  = (predicted_class==y_test).float().sum().item()
    accuracy = corrected_sample / len(data_loader.dataset)
    print("Accuracy : {}".format(accuracy))

data_loader_test = torch.utils.data.DataLoader(mnist_test, batch_size=1, shuffle=False)
mytest(model, data_loader_test)
  

Точность: 0.92232

[код 2 ]

 with torch.no_grad():
    x_test = mnist_test.test_data.view(-1,28*28).float().to(device)
    y_test = mnist_test.test_labels.to(device)

    prediction = model(x_test)
    correct_prediction = torch.argmax(prediction,1) == y_test
    accuracy = correct_prediction.float().mean()
    print("Accuracy ", accuracy.item())
  

Точность 0.8826999664306641

Комментарии:

1. Какова форма mnist_test.test_data ? Ваша модель находится в режиме оценки?

2. Форма mnist_test.test_data равна [10000,28,28]. При попытке режима eval «model.eval()» не имеет значения. модель просто «nn.Linear (784,10, смещение = True)».

3. Можете ли вы показать нам полный код? (должно быть достаточно коротким) Я не могу найти здесь ничего неправильного.