训练文本分类CNN模型时遇数据基数不匹配ValueError问题求助
问题分析与解决
错误根源
报错显示输入特征的样本数(37)和标签样本数(40019)不匹配,核心原因是你把包含37列的特征DataFrame直接传给了Tokenizer。而Tokenizer的fit_on_texts()和texts_to_sequences()方法需要处理的是单样本对应单文本的字符串列表,传入DataFrame时,它会将每一列识别为一个"样本",最终生成37个序列,和y_train的40019个样本完全不匹配。
解决方法
情况1:仅单列为文本特征
如果数据中只有某一列是用于分类的文本内容,修改特征提取逻辑,只保留该文本列:
# 替换成你数据中实际的文本列名,比如'text' X = train_data['text'] y = train_data['label']
情况2:多列均为文本特征
如果37列都是文本,先将每一行的所有列文本合并成单个字符串,再传入Tokenizer:
# 合并每行的所有文本列成一个字符串 X = train_data.drop(['label', 'Id'], axis=1).apply(lambda row: ' '.join(row.astype(str)), axis=1) y = train_data['label']
验证修正效果
在生成序列后添加打印,确认样本数匹配:
print(len(X_train_sequences), y_train.shape) # 正常应输出:40019 (40019,)
修正后重新运行训练代码,样本数不匹配的问题即可解决。
内容的提问来源于stack exchange,提问作者mohammad motealeh
相关产品推荐
相关产品推荐

