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

使用tf.saved_model.load()加载模型时出现‘Read less bytes than requested’错误求助

解决Windows导出TensorFlow SavedModel在Mac/Docker加载时的"Read less bytes than requested"错误

问题背景

同事在Windows环境训练并导出了目标检测模型的SavedModel,目录包含variables文件夹(含variables.data-00000-of-00001、variables.index)和saved_model.pb。在Mac本地或Docker环境加载时,运行测试脚本:

import tensorflow as tf

model = tf.saved_model.load("./saved_model")

print("loaded model")
print(model.summary())

触发如下错误:

Traceback (most recent call last):
File "/Users/alexandrospouroullis/programming-projects/elevat3d/backend/workspace/training_demo/exported-models/my_model_1024/testFile.py", line 4, in 
model = tf.saved_model.load("./saved_model")
File "/Users/alexandrospouroullis/opt/miniconda3/envs/elevat3d-api/lib/python3.10/site-packages/tensorflow/python/saved_model/load.py", line 782, in load
result = load_partial(export_dir, None, tags, options)["root"]
File "/Users/alexandrospouroullis/opt/miniconda3/envs/elevat3d-api/lib/python3.10/site-packages/tensorflow/python/saved_model/load.py", line 912, in load_partial
loader = Loader(object_graph_proto, saved_model_proto, export_dir,
File "/Users/alexandrospouroullis/opt/miniconda3/envs/elevat3d-api/lib/python3.10/site-packages/tensorflow/python/saved_model/load.py", line 189, in __init__
self._restore_checkpoint()
File "/Users/alexandrospouroullis/opt/miniconda3/envs/elevat3d-api/lib/python3.10/site-packages/tensorflow/python/saved_model/load.py", line 507, in _restore_checkpoint
load_status = saver.restore(variables_path, self._checkpoint_options)
File "/Users/alexandrospouroullis/opt/miniconda3/envs/elevat3d-api/lib/python3.10/site-packages/tensorflow/python/training/tracking/util.py", line 1430, in restore
object_graph_string = reader.get_tensor(base.OBJECT_GRAPH_PROTO_KEY)
File "/Users/alexandrospouroullis/opt/miniconda3/envs/elevat3d-api/lib/python3.10/site-packages/tensorflow/python/training/py_checkpoint_reader.py", line 66, in get_tensor
return CheckpointReader.CheckpointReader_GetTensor(
IndexError: Read less bytes than requested

可能原因及解决方案

1. SavedModel文件传输损坏

Windows与Mac文件系统差异,或压缩/传输时未采用二进制模式,导致variables.data-00000-of-00001等二进制文件字节丢失。

  • 解决:
    • 让同事用二进制模式打包SavedModel(如zip打包时禁用文本转换),重新传输。
    • 校验文件哈希值:在Windows端计算variables.data-00000-of-00001的MD5/SHA256,Mac端接收后对比,确认文件完全一致。

2. TensorFlow版本不匹配

即使已解决依赖兼容,小版本差异(如Windows用2.10.0,Mac用2.10.1)可能导致SavedModel序列化格式细节不兼容。

  • 解决:
    • 确认Windows导出模型的TensorFlow版本,在Mac/Docker环境安装完全相同的版本。
    • 若无法匹配版本,让同事重新导出模型时指定兼容格式,或升级/降级双方TensorFlow版本至同一稳定版。

3. 导出路径含特殊字符

Windows路径编码与Mac不同,若导出时路径包含中文、空格或特殊字符,可能导致SavedModel内部存储的路径信息异常。

  • 解决:
    • 让同事在Windows端使用无特殊字符的路径导出模型,如D:/models/target_detection_model。
    • 重新导出后再传输加载。

4. 模型导出不完整

Windows端导出过程中可能出现中断,导致variables文件夹或saved_model.pb未完全生成。

  • 解决:
    • 让同事重新执行导出命令,确保日志无报错,导出完成后再打包传输。
    • 对比导出后模型文件的大小,确认与正常导出的同类型模型大小匹配。

验证步骤

  1. 优先校验文件完整性,对比哈希值排除损坏问题;
  2. 匹配TensorFlow版本,用相同版本尝试加载;
  3. 若以上无效,让同事重新导出模型,确保导出过程正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:40:27