如何对除第一维度外的所有维度应用torch.all计算准确率?
多维度适配的全匹配准确率计算
要实现对除第一批次维度外所有维度的全匹配判断,无需针对不同维度数写不同代码,直接通过动态生成维度索引即可:
# 计算每个样本是否完全匹配 matches = (outputs.round() == targets).all(dim=tuple(range(1, outputs.ndim))) # 计算准确率 accuracy = matches.sum().item() / outputs.shape[0]
原理说明
outputs.ndim获取张量的总维度数,比如形状为NxAxB时返回3,NxA时返回2range(1, outputs.ndim)生成从第1维(跳过批次维度)到最后一维的索引序列- 将索引序列转为元组传给
.all()的dim参数,方法会自动在这些维度上依次执行全匹配判断,最终得到每个样本的匹配结果(形状为(N,)的布尔张量)
这种写法兼容任意大于1维的输入形状(只要outputs和targets维度一致),不用根据输出维度手动调整dim参数。
内容的提问来源于stack exchange,提问作者mxcx
相关产品推荐
相关产品推荐

