You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Keras evaluate函数仅返回损失值,如何获取准确率?

解决Keras模型evaluate只返回损失值、无法获取准确率的问题

这个问题我之前也碰到过,核心原因很简单:你的模型在编译阶段没有指定要评估的准确率指标,所以evaluate函数默认只返回损失值这一个标量,自然用score[0]会报索引错误。下面给你两种清晰的解决思路:

方法一:重新编译模型(推荐)

Keras的evaluate返回的指标完全由你在compile时通过metrics参数定义,默认只有损失值。你只需要给模型重新添加准确率指标编译,再运行评估即可——放心,重新编译不会改变你已经训练好的权重。

步骤:

  1. 找到你当初编译模型的代码,根据任务类型修改成对应形式:
    • 多分类任务(标签是one-hot编码):
      model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
      
    • 多分类任务(标签是整数形式,比如0、1、2表示类别):
      model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy'])
      
    • 二分类任务:
      model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['binary_accuracy'])
      
  2. 重新运行评估代码:
    score = model.evaluate(X_test, Y_test, verbose=0)
    print(f"测试损失值:{score[0]},测试准确率:{score[1]}")
    
    这时候score就是一个包含两个元素的列表,第一个是损失,第二个是你指定的准确率。

方法二:手动计算准确率(无需重新编译)

如果你不想重新编译模型,也可以通过模型的预测结果手动计算准确率:

import numpy as np

# 获取模型预测结果
predictions = model.predict(X_test, verbose=0)

# 根据任务类型处理预测结果和真实标签
# 示例1:多分类(one-hot标签)
predicted_classes = np.argmax(predictions, axis=1)
true_classes = np.argmax(Y_test, axis=1)

# 示例2:二分类
# predicted_classes = (predictions > 0.5).astype(int)
# true_classes = Y_test.astype(int)

# 计算准确率
accuracy = np.mean(predicted_classes == true_classes)
print(f"测试准确率:{accuracy}")

注意事项

  • 一定要根据任务类型选择对应的准确率指标,不然会出现计算错误或者指标不符合预期的情况。
  • 如果你用的是tf.keras(TensorFlow集成的Keras),语法和原生Keras完全一致,上面的方法同样适用。

内容的提问来源于stack exchange,提问作者Yasheel Vyas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:10:16