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

使用load_model加载tensorflow.keras训练后模型报JSON解码错误,未训练模型加载正常

问题根因

你遇到的JSONDecodeError: Expecting value: line 1 column 1错误,本质是SavedModel格式下存储模型结构配置的keras_metadata.pb文件损坏导致的。这个文件里序列化了Keras模型的结构元数据,底层用JSON格式存储,所以加载时会调用JSON解析模块,你看不到明文JSON文件是因为这些信息被打包在pb二进制文件里。
你本地构建的空白模型可以正常保存加载,说明本地TensorFlow环境没有问题,问题出在超算平台的模型保存环节,或者SCP跨平台传输环节的文件损坏。

解决方案

  • 第一步先确认超算端模型保存完整性
    先在超算平台上直接加载训练完成的模型,确认保存环节没有问题。正常TF SavedModel格式的目录应该包含4个部分:saved_model.pb、keras_metadata.pb、variables/文件夹、assets/文件夹,检查超算上的模型目录是否包含所有文件,是否存在训练任务被调度系统提前终止、导致保存流程未执行完成的情况。
  • 第二步校验文件传输完整性
    跨平台SCP传输大文件很容易出现截断、丢包的问题,可以分别在超算和本地对模型目录做哈希校验:
    超算端执行:tar -cf - trained_model_640x64/ | md5sum
    本地传输完成后执行同样命令,对比两端的哈希值是否一致,如果不一致说明传输损坏,建议用rsync代替scp传输,支持断点续传和自动校验,命令参考:rsync -avz 超算用户名@超算访问地址:模型目录绝对路径 本地存储路径
  • 第三步如果确认超算端模型本身无法加载,调整保存逻辑
    保存模型时显式指定格式参数:tf.keras.models.save_model(model, "保存路径", save_format="tf"),避免版本兼容导致的格式识别错误。同时建议额外单独保存权重文件:model.save_weights("保存路径/weights.h5"),就算SavedModel结构损坏,也可以通过本地重建模型结构加载权重复用训练结果。
  • 应急方案
    如果无法重新传输或重新保存模型,可以直接把超算上模型目录下variables/文件夹的内容拷贝到本地,本地运行你给出的build_model()代码重建相同结构的模型,执行model.load_weights("variables/")即可直接加载训练好的权重,完全跳过SavedModel的解析流程,不会触发JSON解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:45:00