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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:36:19