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

Python报错:index 1 is out of bounds for axis 0 with size 1及模型评估问题

解决"index 1 is out of bounds for axis 0 with size 1"报错

这个报错的核心原因很明确:你尝试访问score[1],但score变量其实只有1个元素(甚至是单个数值),根本没有索引1的位置。

为什么会出现这个情况?

Keras模型的evaluate()方法返回的结果完全取决于你编译模型时指定的metrics参数:

  • 如果你编译模型时只写了损失函数(比如classifier.compile(loss='binary_crossentropy', optimizer='adam')),evaluate()只会返回一个单独的损失值,是个浮点数,不是列表/数组。这时候你用score[0]都会报错,更别说score[1]了。
  • 只有当你编译时添加了准确率这类指标(比如metrics=['accuracy']),evaluate()才会返回包含「损失值+准确率」的列表,这时候score[0]是损失,score[1]是准确率,才能正常访问。

具体修复步骤

  1. 修正模型编译代码,确保包含准确率指标:
# 示例,根据你的任务调整损失函数和优化器
classifier.compile(
    optimizer='adam',
    loss='binary_crossentropy',
    metrics=['accuracy']  # 关键:添加这个指标
)
  1. 修正变量名的语法错误:你第一行写的Evaluate training score = ...是无效的Python变量名,改成合法的变量名:
score = classifier.evaluate(X_test, y_test, verbose=1)
  1. 补全未完成的evaluate_model函数:你代码里pred = classifier.predict(X...没写完,后续可以根据二分类任务的逻辑补全混淆矩阵的计算(比如设置阈值判断预测类别)。

修正后的完整示例代码

# 先确保模型编译正确
classifier.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# 评估模型并打印结果
score = classifier.evaluate(X_test, y_test, verbose=1)
print("\nTest Results for {} test entries on which we did not trained the neural network.\n".format(len(X_test)))
print("Keras evaluation result (loss):", score[0])
print("Percentage right: {}%.".format(score[1]*100))
print("Error: {}%.\n".format((1-score[1])*100))

# 补全evaluate_model函数
def evaluate_model(classifier, X_test, y_test):
    confusion_matrix = np.array([ [0, 0], [0, 0] ])
    pred = classifier.predict(X_test)
    # 二分类任务下,用0.5作为阈值判断预测类别
    pred_classes = (pred > 0.5).astype(int).flatten()
    # 填充混淆矩阵
    for true_label, pred_label in zip(y_test, pred_classes):
        confusion_matrix[true_label][pred_label] += 1
    return confusion_matrix

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:16:42