使用Keras的np_utils.to_categorical方法触发IndexError报错求助
解决Keras np_utils.to_categorical的IndexError问题
嘿,这个问题我之前踩过坑,咱们快速搞明白怎么回事:
问题原因
你遇到的IndexError: index 3 is out of bounds for axis 1 with size 3,核心原因是**np_utils.to_categorical默认要求标签是从0开始的整数序列**。
你的标签是[1,1,...,2,2,...,3,3],最大的标签值是3,但你设置了num_classes=3——这时候生成的one-hot数组只有3列,对应的索引是0、1、2,当代码尝试把标签3放到索引3的位置时,自然就越界了。
解决方案
有两种处理方式,更推荐第一种:
方式1:调整标签为从0开始(推荐)
把所有标签值减1,让标签变成[0,0,...,1,1,...,2,2],这样和num_classes=3完全匹配,生成的one-hot编码也正好对应3类:
from keras.utils import np_utils # 调整标签为0起始 testY_adjusted = testY - 1 Y_train = np_utils.to_categorical(testY_adjusted, 3)
验证一下:调整后原来的标签1会被编码为[1,0,0],标签2为[0,1,0],标签3为[0,0,1],完全符合你的3类需求。
方式2:修改num_classes为4(不推荐)
如果你不想改动原始标签,可以把num_classes设为4,这样数组会有4列(索引0-3),能容纳标签3,但这样会多一列全0的(对应不存在的标签0),属于冗余操作,不建议用:
Y_train = np_utils.to_categorical(testY, 4)
内容的提问来源于stack exchange,提问作者Adelov
相关产品推荐
相关产品推荐

