python - Keras,得分与预测
问题描述
我目前正在为分类(20 类)、文本分类问题训练 Keras 模型。
当我使用训练和验证集训练模型时,我得到如下输出:
纪元 19/20 59500/59500 [===============================] - 22s 371us/步 - 损失: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 [===============================] - 1s 66us/步 10500/10500 [====== ========================] - 1s 80us/step Keras 分数:0.9546093940734863 测试集准确率:49.58%
我希望分数完全相同,因为它是相同的数据,相同的度量和一切。标签被编码为 one-hot 向量,因此是准确度计算中的 argmax。
我当然希望实现模型在训练时似乎具有的性能,我只是对为什么性能甚至不一样感到困惑。虽然我理解模型可能不正确,但我不明白为什么模型预测的东西与它用来计算分数的东西不同(指标是准确性)。
该模型经过以下训练:
history = classifier.fit(X_train, train_labels,
epochs=20,
verbose=True,
validation_data=(X_test, valid_labels),
batch_size=20)
谢谢!
编辑
模型返回的预测不是单热向量。它们是一个整数,我相信它是预测的类。
解决方案
你的预测 (N,20) 是 numpy 数组吗?从您的标签来看y
, 是一次性编码的,我希望对样本x
的预测也是一个具有每个类别概率的向量(在这种情况下为 20)。
如果是这种情况;
accuracy_score(np.argmax(valid_labels, axis=1), np.argmax(predictions, axis=1))
应该做的伎俩。
推荐阅读
- javascript - vue 路由器滚动行为提示路由值
- google-apps-script - 我如何通过谷歌脚本从谷歌表中获取一天
- apache-spark - 如何在不知道 Spark 中的任何特定值的情况下根据 GroupBy 列的值选择列
- css - 如何禁用 Vuetify 数据表的悬停效果?
- javascript - 如何使用 highchart 导出带有自定义标记的仪表图?
- python - IndexError:迭代两个 webelements 列表时列表索引超出范围
- html - Bootstrap 列不会填充剩余高度
- powershell - Powershell复制文件信息
- image - 在颤振项目中上传图像时项目挂起
- sql - elasticsearch canvas,是否有文本输入框查询索引?