Правильно ли так проверять точность работы модели?

Есть модель для распознования мнист цифр:

%%time
model = torch.nn.Sequential(
    nn.Linear(784, 392),
    nn.ReLU(),
    nn.Linear(392, 196),
    nn.ReLU(),
    nn.Linear(196, 98),
    nn.ReLU(),
    nn.Linear(98, 10),
    nn.LogSoftmax(),
)
loss_func = nn.NLLLoss()

learning_rate = 1e-3
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
train_log = []
for i in range(200):
    pred = model(X_train)
    optimizer.zero_grad()
    loss = loss_func(pred, y_train)
    loss.backward()
    optimizer.step()
    # check accuracy
    predTest = model(X_test)
    train_log.append(torch.mean((torch.argmax(predTest, dim=1) == y_test).float())*100)

    if i % 10 == 0:
        display.clear_output(wait=True)
        plt.figure(figsize=(8, 6))     
        plt.title("Accuracy on test data")
        plt.xlabel("iteration")
        plt.ylabel("Accuracy")
        plt.plot(train_log, 'r')
        plt.grid()
        plt.show()
        print(f"iter = {i+10}/{1000} loss = {loss.item()}")
        print(f"accuracy = {train_log[-1]}")

Правильно ли так проверять точность модели во время тренировки? Вот если что полученный график:

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Данила Фоминых

Точность работы модели следует оценивать по двум параметрам: 1)Дисперсия 2)Смещение • Смещение — это ошибка, возникающая в результате ошибочного предположения в алгоритме обучения. В результате большого смещения алгоритм может пропустить связь между признаками и выводом (недообучение). • Дисперсия — это ошибка чувствительности к малым отклонениям в тренировочном наборе. При высокой дисперсии алгоритм может как-то трактовать случайный шум[en] в тренировочном наборе, а не желаемый результат (переобучение).

Если ваша модель показывает хорошую точность на тренировочных данных, то прогоните её через новые, с которыми она еще не знакома. У вас в алгоритме видно хорошую точность натренировочном наборе, теперь проверяйте наличие переобучения (дисперсию) на новых данных.

Так же можно оценивать модель по разным параметрам (accuracy, loss или кастомные варианты), но loss является самым универсальным.

→ Ссылка