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

Keras模型评估报错:numpy.int32对象不可迭代求解决

解决numpy.int32 object is not iterable错误

错误原因

你的代码报错核心是model.predict(test_img_pca)返回的数组维度不符合预期:

  • 若为二分类任务且模型最后一层用sigmoid激活,返回的是形状为(样本数,)的一维数组,每个元素是0-1之间的概率值。此时遍历prediction时,每个row是单个numpy.int32/float值,调用max(row)会触发错误——单个数值不是可迭代对象,无法计算最大值。
  • 若为多分类任务,则说明模型输出维度错误(比如最后一层输出神经元数不等于类别数),导致prediction不是二维数组。

解决方案

根据任务类型选择对应的修改方式:

1. 多分类任务

直接使用np.argmax()高效获取每个样本的预测类别,替代低效且易出错的列表推导式:

from sklearn.metrics import accuracy_score, auc, f1_score, recall_score
import numpy as np

prediction = model.predict(test_img_pca)

# 沿axis=1维度取最大值对应的索引,即预测类别
prediction_cat = np.argmax(prediction, axis=1)

acc_krr = accuracy_score(y_test_cat, prediction_cat)
print("Accuracy: ", acc_krr)

rcl_krr = recall_score(y_test_cat, prediction_cat, average = None)
print("Recall: ", rcl_krr)

f1_krr = f1_score(y_test_cat, prediction_cat, average = None)
print("F1: ", f1_krr)

2. 二分类任务

通过阈值(通常取0.5)将概率值转换为类别标签:

from sklearn.metrics import accuracy_score, auc, f1_score, recall_score
import numpy as np

prediction = model.predict(test_img_pca)

# 用0.5作为阈值,将概率转为0/1类别,flatten确保形状与y_test_cat匹配
prediction_cat = (prediction > 0.5).astype(int).flatten()

acc_krr = accuracy_score(y_test_cat, prediction_cat)
print("Accuracy: ", acc_krr)

rcl_krr = recall_score(y_test_cat, prediction_cat, average = None)
print("Recall: ", rcl_krr)

f1_krr = f1_score(y_test_cat, prediction_cat, average = None)
print("F1: ", f1_krr)

额外检查

如果是多分类任务但输出维度异常,需确认模型最后一层配置:

  • 输出神经元数量等于数据集的类别总数
  • 激活函数使用softmax(多分类场景标准配置)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:15:32