Tensorflow加载checkpoint报错OSError: file signature not found如何解决?
TensorFlow手动终止训练后加载Checkpoint报错解决方案
核心错误原因
你调用model.load_weights时传入的路径参数错误:你指定的checkpoint是TensorFlow自动生成的检查点记录文本文件,仅用于存储所有已生成权重文件的路径索引,本身不是权重文件,加载非权重文件自然会触发文件签名不匹配的OS错误。
其他可能的触发原因:
- 手动终止训练时刚好处于最新checkpoint的写入流程中,导致最新的权重文件损坏不完整
- 加载权重所用的模型结构,和训练时保存权重的模型结构不一致(你调整过模型参数,很容易出现隐层维度、词汇表大小、层数不匹配的问题)
修复步骤
- 首先确认你的checkpoint文件夹下的文件命名规则,正常TensorFlow保存的权重会生成三个同名不同后缀的文件,例如
ckpt_14.data-00000-of-00001、ckpt_14.index、ckpt_14.meta,其中权重的统一前缀是ckpt_14 - 优先使用TensorFlow内置接口自动获取最新可用的权重路径,替换你手动拼接的路径代码:
latest_ckpt = tf.train.latest_checkpoint(checkpoint_dir) model.load_weights(latest_ckpt) - 如果上述操作仍然报错,说明最新的checkpoint因为手动终止训练损坏,手动指定上一个完整的权重前缀即可:
# 加载第13个生成的checkpoint,前缀和你实际生成的文件名保持一致即可 model.load_weights(os.path.join(checkpoint_dir, "ckpt_13")) - 后续训练建议给
tf.keras.callbacks.ModelCheckpoint回调添加save_best_only=True参数,避免中途终止训练生成损坏的权重文件。
内容的提问来源于stack exchange,提问作者Fabrizio
相关产品推荐
相关产品推荐

