如何解决Keras pad_sequences出现zero-size array to reduction operation maximum报错
报错原因
- 核心错误来自
filterPairs函数的逻辑缺陷:原代码遍历range(len(pairs))得到的是整型索引值,而非实际的英法双语语料对。将整数传入filterPair函数后,调用p[0].split()必然触发异常,被except捕获后统一返回False,最终过滤得到的pairs是空列表。 - 空列表
pairs会导致build_lang函数中添加序列的循环完全不执行,input_seq、output_seq最终都是空列表。你调用pad_sequences做输出序列填充时没有显式指定maxlen参数,函数会自动计算输入序列的最大长度,空列表对应的长度数组是空数组,调用np.max时就触发了零大小数组的报错。
修复方案
- 修正
filterPairs函数的遍历逻辑,改为遍历语料对本身而非索引:
def filterPairs(pairs): return [pair for pair in pairs if filterPair(pair)]
- 建议给输出序列的
pad_sequences调用也显式指定maxlen=max_length,避免后续边界场景触发同类报错,修改后build_lang的返回部分如下:
return ( keras.preprocessing.sequence.pad_sequences(input_seq, maxlen=max_length, padding='post', truncating='post'), keras.preprocessing.sequence.pad_sequences(output_seq, maxlen=max_length, padding='post', truncating='post'), input_lang, output_lang )
- 可添加校验逻辑确认过滤后的语料数量,避免空数据进入后续流程:
pairs = filterPairs(pairs) print(f"过滤后语料对数量: {len(pairs)}")
内容的提问来源于stack exchange,提问作者ZealotTV
相关产品推荐
相关产品推荐

