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

Python报错:'bool' object is not subscriptable,求代码修复方案

解决TypeError: 'bool' object is not subscriptable问题

错误原因

报错出在get_correct_indices函数的correct[i]语句上。调用y_model.mean()时未指定轴参数,会把整个模型输出张量压缩成单个标量值,后续np.argmax处理后得到单个整数,和labels比较后生成的是一个单个布尔值,而非与样本数量对应的布尔数组。尝试用correct[i]下标访问时,自然会触发报错——布尔值不属于可下标对象。

简单修复方法

1. 修正get_correct_indices函数

如果模型输出是形状为(batch_size, num_classes)的概率分布(无额外集成维度),直接去掉多余的.mean()即可;如果是集成模型(输出含额外维度,比如(ensemble_size, batch_size, num_classes)),需给.mean()指定正确的轴(比如axis=0对集成模型结果取平均)。

修改后的函数示例:

def get_correct_indices(model, x, labels):
    y_model = model(x)
    # 若为集成模型,替换成 y_pred = np.argmax(y_model.mean(axis=0), axis=1)
    y_pred = np.argmax(y_model, axis=1) 
    correct = y_pred == np.squeeze(labels)
    correct_indices = [i for i in range(x.shape[0]) if correct[i]]
    incorrect_indices = [i for i in range(x.shape[0]) if not correct[i]]
    return correct_indices, incorrect_indices

2. 同步修正plot_entropy_distribution函数

里面的probs计算也要对应调整,去掉不必要的.mean()或指定正确轴:

# 无集成维度时直接用
probs = model(x).numpy()
# 集成模型时用
# probs = model(x).mean(axis=0).numpy()

验证

修改后,correct会变成长度等于样本数的布尔数组,correct[i]可正常访问每个样本的判断结果,报错即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:40:25