文本分类CNN训练报错:InvalidArgumentError索引越界问题求助
错误根源分析
核心问题:Embedding层输入类型完全不匹配
你的模型首层是Embedding层,它要求输入必须是0到词汇表大小-1之间的非负整数索引(错误提示里的[0, 3345)范围,对应你Embedding层的词汇表大小为3345),但你传入的X_train是经过MinMaxScaler归一化后范围为[-1,1]的数值向量,其中包含-1这类负数,直接触发了Embedding层的索引越界错误(即错误日志里的indices[31,66] = -1 is not in [0, 3345))。
具体拆解
- Embedding层的本质:它是把离散的整数词索引映射为连续词向量,输入必须是代表词位置的整数,而非归一化后的连续数值。
- 数据预处理逻辑错误:你混淆了两种文本特征处理路径:
- 若要用Embedding层:需先对文本做整数编码(比如用Tokenizer将每个词映射为唯一非负整数索引),直接输入这些整数序列,不需要做MinMaxScaler归一化。
- 若已将文本转为连续数值特征(如TF-IDF、预训练词向量):则不需要Embedding层,直接把数值向量输入Conv1D层即可。
佐证依据
从模型参数计算可知:Embedding层的参数数量是3345 * 128 = 428160,和你给出的Param#完全一致,说明该层确实是基于3345个词的索引做映射,而你的输入数据完全不符合这个要求。
内容的提问来源于stack exchange,提问作者quickhelp
相关产品推荐
相关产品推荐

