在用karas做分类的时候,本来是10分类任务,数据预处理之后有一类只有一个数据,所以把这类跟相近的合并了,num_classes改成了9,结果出现了错误。
label = np.array(keras.utils.to_categorical(label, num_classes))
File “/root/anaconda3/envs/lvyy/lib/python3.6/site-packages/keras/utils/np_utils.py”, line 29, in to_categorical
categorical[np.arange(n), y] = 1
IndexError: index 9 is out of bounds for axis 1 with size 9
原先
label = [0,1,2,3,4,5,6,7,8,9]
num_classes = 10
合并数据以后
label = [0,1,2,4,5,6,7,8,9]
#第三类合并了
num_classes = 9
出现了上述错误。
查了一下karas的库,num_classes代表的是类别数。但是它默认类别数是从0类到最大类。
eg1:我们初始的label = [0,1,2,3,4,5,6,7,8,9],所以库函数会默认类别数为10类:从0类算起,到最大类9类,一共是10类。这时我们设置num_classes = 10,索引不会出现问题。
eg2:当我们合并第3类时,label = [0,1,2,4,5,6,7,8,9],库函数仍然会默认类别数为10类:从0类算起,到最大类9类,仍然一共是10类。此时设置num_classes = 9,在索引时就会出现超出范围。
eg3:若我们类别从1类开始,既label = [1,2,3,4,5,6,7,8,9],库函数还是会默认为10类,此时若num_classes = 9则会报错。应改为num_classes = 10。
了解了报错的原因,解决办法就很好理解了。
直接将类别号设置为最大类别号+1。
label = [0,1,2,4,5,6,7,8,9]
#第三类合并了
num_classes = 10
修改后续类别号,使得最大类别号为8。
label = [0,1,2,3,4,5,6,7,8]
#第三类合并了,并修改后续类别号
num_classes = 9