Keras_OCR示例代码训练识别器触发ValueError问题求助
Keras-OCR识别器训练触发ValueError问题排查
我在基于Keras-OCR官方示例训练OCR模型时,已经解决了多个错误,但现在训练识别器阶段触发了ValueError。我怀疑是图像生成器传入了None值,但检查后没发现异常。我使用了自定义字母表和文本生成器,且同一代码中训练检测器时未出现该错误。
识别器训练的fit函数代码如下:
recognizer.training_model.fit( x=recognition_train_generator, steps_per_epoch=math.ceil(len(background_splits[0]) / recognition_batch_size), epochs=1000, workers=0, callbacks=[ tf.keras.callbacks.EarlyStopping(restore_best_weights=True, patience=25), tf.keras.callbacks.CSVLogger(f'{recognizer_basepath}.csv', append=True), tf.keras.callbacks.ModelCheckpoint(filepath=f'{recognizer_basepath}.h5') ], validation_data=recognition_val_generator, validation_steps=math.ceil(len(background_splits[1]) / recognition_batch_size), batch_size=recognition_batch_size, )
触发的错误信息:
ValueError: Exception encountered when calling layer 'lambda_1' (type Lambda). None values not supported. Call arguments received by layer 'lambda_1' (type Lambda): • inputs=['tf.Tensor(shape=(None, None, None, 512), dtype=float32)', 'tf.Tensor(shape=(None, 6), dtype=float32)'] • mask=None • training=True
排查建议
- 检查自定义文本生成器的输出:确认每个批次返回的文本序列没有None值,且长度符合模型要求。Keras-OCR的识别器要求文本序列是固定长度(或经过填充)的索引数组,自定义生成器可能在处理特殊字符或空文本时返回了None。
- 核对生成器的返回格式:识别器的训练生成器需要返回**(图像特征, 文本标签)**的元组,确保文本标签部分没有出现None,且维度和模型输入匹配。错误里提到的
lambda_1层大概率是处理文本标签的环节,空值会在这里触发报错。 - 移除fit中的冗余参数:你在fit里同时指定了
batch_size和生成器,生成器本身应该已经包含批次大小配置,重复设置可能导致维度冲突,建议删除batch_size=recognition_batch_size这一行。 - 验证验证集生成器:和训练集生成器做同样的检查,确认validation_data的输出没有None值,且格式和训练集一致。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

