Керас, счет против прогноза - PullRequest
0 голосов
/ 24 октября 2019

В настоящее время я тренирую модель 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)

Спасибо!

РЕДАКТИРОВАТЬ

Прогнозы, возвращаемые моделью, не являются горячим вектором. Я полагаю, что это целое число, предсказанное классом.

Ответы [ 2 ]

0 голосов
/ 27 октября 2019

Я выяснил, что функция потерь была неправильной для задачи классификации мультикласса. Его изменение и переподготовка дали согласованные результаты как для данных проверки, предоставленных для обучения, так и для моего собственного набора тестов.

0 голосов
/ 24 октября 2019

Является ли ваш прогноз (N, 20) пустым массивом? Судя по вашим меткам, y, будучи закодированным горячим кодом, я ожидаю, что прогноз для выборки x будет также вектором с вероятностями для каждой категории (в данном случае 20).

Если это так, то

accuracy_score(np.argmax(valid_labels, axis=1), np.argmax(predictions, axis=1))

должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...