В настоящее время я тренирую модель Keras для классификации (20 классов), проблема классификации текста.
Когда я тренирую модель с набором обучения и проверки, я получаю вывод, подобный этому:
Epoch 19/20 59500/59500 [=============================] - 22 с 371 мс / шаг- потеря: 0,0038 - точность: 0,9989 - val_loss: 0,6645 - val_accuracy: 0,9550
Предлагая очень хорошую точность проверки. После этого, когда я вызываю мою модель для оценки результата (на том же проверочном наборе), я получаю:
from sklearn.metrics import accuracy_score
predictions = classifier.predict(X_test)
print(f"Keras Score: {classifier.score(X_test, valid_labels)}")
print(f"Accuracy on test set: {100 * accuracy_score(np.argmax(valid_labels, axis=1), predictions):.2f}%")
Выход:
10500/10500[==============================] - 1с 66us / шаг 10500/10500 [==============================] - 1 с 80 мс / шаг Оценка Кераса: 0,9546093940734863 Точность на тестовом наборе: 49,58%
Я ожидалбаллы должны быть абсолютно одинаковыми, так как это те же данные, та же мера и все. Метки кодируются в виде векторов с одним горячим током, таким образом, argmax в расчете точности.
Я бы, конечно, хотел бы достичь той производительности, которую модель демонстрирует во время тренировок, я просто смущен тем, почему производительность даже не такая. Хотя я понимаю, что модель может быть неправильной, я не понимаю, почему модель предсказывает нечто иное, чем то, что она использует для вычисления балла (метрики - это точность).
Модель обучается по:
history = classifier.fit(X_train, train_labels,
epochs=20,
verbose=True,
validation_data=(X_test, valid_labels),
batch_size=20)
Спасибо!
РЕДАКТИРОВАТЬ
Прогнозы, возвращаемые моделью, не являются горячим вектором. Я полагаю, что это целое число, предсказанное классом.