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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:02:20