训练SSD MobileNet V2模型遇mutable default错误求助
解决SSD MobileNet V2 FPNLite训练时的mutable default错误
这个错误的核心原因是dataclass不允许将可变类型(这里是SGDConfig类实例)直接作为字段默认值,必须通过default_factory来生成默认实例。具体解决步骤如下:
- 定位到报错对应的配置文件:
official/modeling/optimization/configs/optimizer_config.py - 找到定义
OptimizerConfig(或相关配置类)的代码块,修改字段定义:
原代码可能类似:
替换为:@dataclass class OptimizerConfig: sgd: SGDConfig = SGDConfig()from dataclasses import dataclass, field @dataclass class OptimizerConfig: sgd: SGDConfig = field(default_factory=SGDConfig) - 检查文件中其他类似的可变默认值字段(如adam、rmsprop等配置类),统一改成
field(default_factory=对应配置类)的形式 - 保存修改后重新运行训练脚本
补充说明:Python的dataclass禁止使用可变默认值是为了避免意外的共享状态问题,TensorFlow 2.12的官方配置模板中可能存在这个疏漏,手动修正配置类的字段定义即可解决问题。
内容的提问来源于stack exchange,提问作者Bongo Juniorr
相关产品推荐
相关产品推荐

