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

Keras独热编码报错ValueError:y应为1d数组,得到(9121,14)形状如何解决

错误原因
  • 触发ValueError: y should be a 1d array, got an array of shape (9121, 14) instead的核心原因是LabelEncoder.fit_transform()方法仅支持1维数组作为输入,但你传入的y_train、y_test是形状为(样本数,14)的二维数组,不符合输入要求。
  • 原有代码存在逻辑漏洞:测试集直接调用fit_transform()会重新拟合标签编码器,导致训练集和测试集的标签编码规则不一致,最终模型的训练、评估结果都会出现偏差。
修复方案

根据你的标签类型选择对应处理方式即可:

单标签场景

如果你的二维标签数组是单标签被错误转为二维(比如每一行仅存储一个标签值、嵌套结构导致意外升维),先将标签降为1维,再修正测试集的编码逻辑即可,修复后的完整代码如下:

import numpy as np
import tensorflow
import keras
from keras.utils import np_utils
from sklearn.preprocessing import LabelEncoder
import pickle

# 数据格式转换
X_train = np.array(X_train)
y_train = np.array(y_train)
X_test = np.array(X_test)
y_test = np.array(y_test)

# 将二维标签数组压缩为1维
# 如果你的14列中只有某一列是实际标签,可替换为 y_train = y_train[:, 对应列索引]
y_train = y_train.flatten()
y_test = y_test.flatten()

# 标签独热编码
lb = LabelEncoder()
# 训练集拟合编码器并做转换
y_train = np_utils.to_categorical(lb.fit_transform(y_train))
# 测试集直接使用训练集拟合好的编码器做转换,不重新拟合
y_test = np_utils.to_categorical(lb.transform(y_test))

print(X_train.shape)
print(lb.classes_)
# print(y_train[0:10])
# print(y_test[0:10])

# 序列化编码器用于后续使用
filename = 'labels'
outfile = open(filename,'wb')
pickle.dump(lb,outfile)
outfile.close()

多标签场景

如果你当前的(9121,14)数组本身就是多标签任务的0/1编码结果,不需要再做独热编码处理,直接删除LabelEncoder和to_categorical相关代码,用现有y_train、y_test训练模型即可。

内容的提问来源于stack exchange,提问作者Md Abrar Mahir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 17:06:04