Keras to_categorical独热编码返回异常输出问题求助
解决思路
问题根源
keras.utils.to_categorical默认依据标签的最大值+1确定类别数,你的标签最大值是5,所以默认生成6列(对应索引0到5);当指定num_classes=3时,标签中的5超出了0-2的有效索引范围,因此触发索引越界错误。
具体解决步骤
重新映射标签为连续索引
由于原标签是非连续的(0、2、5),需要先将其转换为0、1、2这类连续的类别索引,代码示例:import numpy as np # 获取训练集的唯一标签 unique_labels = np.unique(y_train) # 创建旧标签到新连续索引的映射 label_mapping = {old_label: new_idx for new_idx, old_label in enumerate(unique_labels)} # 转换训练集标签 y_train_mapped = np.array([label_mapping[label] for label in y_train]) # 若有测试集,同理转换测试集标签 # y_test_mapped = np.array([label_mapping[label] for label in y_test])执行独热编码
转换后的标签为连续的0、1、2,此时使用to_categorical即可得到预期的形状:from keras.utils import to_categorical y_train_onehot = to_categorical(y_train_mapped, num_classes=3)验证结果
可通过np.unique(y_train_mapped)确认标签已转为[0,1,2],再用y_train_onehot.shape检查输出形状是否为(17302, 3)。
内容的提问来源于stack exchange,提问作者Mojtaba Abdi Khassevan
相关产品推荐
相关产品推荐

