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

Siamese网络训练报错TypeError: cannot pickle 'generator' object如何解决

问题解决结论

不需要继续等待,代码存在明确错误,报错TypeError: cannot pickle 'generator' object已经指出了核心问题,继续等待不会有任何进展。

错误原因

Keras/TensorFlow的model.fit()开启use_multiprocessing=True参数时,需要在主进程和子进程之间传递数据加载逻辑,Python的普通生成器带有运行时状态,无法被序列化(pickle)用于进程间通信,因此程序卡在训练初始化阶段,无法进入实际的批次训练流程。你看到的Jupyter单元格仍显示运行中,只是子进程报错后主进程未正常捕获退出信号的假死状态。

修复方案

  • 最简修复:直接关闭多进程开关,将use_multiprocessing=True改为use_multiprocessing=False,普通自定义生成器默认支持多线程加载,数据加载速度足够匹配训练速度的情况下,该方案仅需修改1行代码即可正常运行。
  • 性能优化方案:如果确实需要多进程加速数据加载,将自定义生成器重写为继承tf.keras.utils.Sequence的类,Sequence类原生支持多进程下的序列化,不会触发pickle报错,同时还能保证每个epoch的样本不会重复采样,逻辑更严谨。
  • 额外优化点:当前生成器中判断负样本对是否属于正样本的逻辑使用(p1, p2) not in list_tuples,如果正样本对量级较大,该查询是O(n)复杂度会大幅降低生成速度,建议提前将正样本对存入set结构,将查询复杂度降为O(1),提升数据生成效率。

内容的提问来源于stack exchange,提问作者NNNNNNN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:24:03