DeepXDE调用model.restore报错:传入路径非有效checkpoint
解决DeepXDE中
ValueError: The passed save_path is not a valid checkpoint问题 核心问题分析
你的错误根源有两个:
- 检查点未生成:你设置的
ModelCheckpoint(period=100)意味着每100个训练步才保存一次检查点,但训练日志显示你只跑了10个步(Best model at step 10),根本没触发保存操作,自然找不到model.ckpt-100文件。 - 步数计算错误:你用
np.argmin(model.losshistory.loss_test)*100拼接步数,但np.argmin返回的是loss列表的索引(比如你的loss_test有2个元素,索引为0和1),乘以100得到的数值和实际训练步数完全不匹配,导致路径指向一个不存在的文件。
具体修复步骤
1. 调整检查点保存策略
修改ModelCheckpoint参数,确保训练过程中能生成检查点:
checker = dde.callbacks.ModelCheckpoint( save_dir + save_str + "/model.ckpt", save_better_only=True, # 自动保存最优模型,无需手动计算步数 period=10 # 匹配你的训练步数,每10步保存一次,确保覆盖最优步 )
如果想只保存最优模型,save_better_only=True会自动在loss下降时保存,不需要依赖period。
2. 正确恢复模型
不要手动拼接步数路径,直接用以下两种可靠方式:
- 方式一:用检查点前缀恢复(TensorFlow会自动识别最新/最优的检查点文件)
model.restore(save_dir + save_str + "/model.ckpt", verbose=0)
- 方式二:用
train_state直接获取最优步(最准确,避免路径拼接错误)
model.restore(train_state.best_step, verbose=0)
train_state是model.train()返回的对象,已经记录了最优模型对应的训练步,直接传入restore即可。
3. 路径规范检查
确保路径拼接时不要混用./,统一用/分隔,避免生成类似xxx./model.ckpt的非法路径。
额外排查点
- 训练结束后,手动去
save_dir + save_str目录下查看,确认是否生成了.ckpt.data、.ckpt.index、.ckpt.meta这类检查点文件,如果没有,说明保存逻辑未触发,检查period是否大于训练总步数。 - 你看到的TensorFlow deprecated警告不影响当前问题,是DeepXDE兼容旧版本TF的提示,无需处理。
是否需要去DeepXDE平台提问?
当前问题属于代码逻辑错误(保存策略、路径计算),按上述修改即可解决。如果修改后仍出现检查点不存在的问题,再去DeepXDE讨论区提问,提问时附上:
- 修改后的代码片段
- 训练目录下的文件列表截图
- 完整的报错日志
内容的提问来源于stack exchange,提问作者Formal_that
相关产品推荐
相关产品推荐

