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]是准确率,才能正常访问。
具体修复步骤
- 修正模型编译代码,确保包含准确率指标:
# 示例,根据你的任务调整损失函数和优化器 classifier.compile( optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'] # 关键:添加这个指标 )
- 修正变量名的语法错误:你第一行写的
Evaluate training score = ...是无效的Python变量名,改成合法的变量名:
score = classifier.evaluate(X_test, y_test, verbose=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
相关产品推荐
相关产品推荐

