Keras, Score v.s Predict

我目前正在训练一个用于分类(20个类别)的Keras模型,解决文本分类问题。

当我用训练集和验证集训练模型时,得到的输出如下:

第19/20个周期 59500/59500 [==============================] – 22秒 371微秒/步 – 损失: 0.0038 – 准确率: 0.9989 – 验证损失: 0.6645 – 验证准确率: 0.9550

表明验证准确率非常高。之后,当我调用模型来评估分数(在同一个验证集上)时,我得到:

from sklearn.metrics import accuracy_scorepredictions = classifier.predict(X_test)print(f"Keras Score: {classifier.score(X_test, valid_labels)}")print(f"测试集上的准确率: {100 * accuracy_score(np.argmax(valid_labels, axis=1),    predictions):.2f}%")

得到的结果是:

10500/10500 [==============================] – 1秒 66微秒/步 10500/10500 [==============================] – 1秒 80微秒/步 Keras Score: 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)

谢谢!

编辑

模型返回的预测不是独热向量。它们是一个整数,我认为这是预测的类别。


回答:

我发现对于多类分类问题,损失函数是错误的。更改损失函数并重新训练后,在训练提供的验证数据和我的测试集上都得到了一致的结果。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注