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

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

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