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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:03:13