Colab训练的TensorFlow模型在本地PC加载报错该如何解决
问题原因
该报错由TensorFlow跨版本兼容性导致,高版本2.6保存的H5格式模型在低版本2.1加载时,配置字段编码格式不匹配触发属性错误。
解决方案
- 方案1:安装匹配版本TensorFlow(优先推荐)
conda官方源Windows端tensorflow-gpu包更新滞后,改用pip安装即可获取对应版本,建议先新建虚拟环境避免依赖冲突:
# 新建虚拟环境 conda create -n tf26 python=3.8 # 激活环境 conda activate tf26 # pip安装指定版本GPU版TensorFlow pip install tensorflow-gpu==2.6.0
安装完成后直接加载原模型即可。
- 方案2:修改Colab端保存逻辑,适配本地低版本
无需调整本地环境,在Colab训练完成后更换保存方式即可:
- 使用兼容性更好的SavedModel格式保存
Colab端执行:
# 保存为SavedModel格式,会生成一个完整文件夹 model.save('mymodel_savedmodel')
将文件夹下载到本地后执行加载:
from tensorflow import keras model = keras.models.load_model('mymodel_savedmodel')
- 模型结构与权重分开保存(兼容性最强)
Colab端执行:
# 保存模型结构 json_config = model.to_json() with open('model_config.json', 'w', encoding='utf-8') as f: f.write(json_config) # 保存模型权重 model.save_weights('model_weights.h5')
本地加载执行:
from tensorflow.keras.models import model_from_json # 加载结构 with open('model_config.json', 'r', encoding='utf-8') as f: json_config = f.read() model = model_from_json(json_config) # 加载权重 model.load_weights('model_weights.h5')
- 方案3:临时补丁修复(仅应急使用)
不想调整两端环境的前提下,可在本地加载前修改导入逻辑,跳过错误的decode步骤:
import json import h5py from tensorflow.keras.models import model_from_json # 读取h5模型文件 f = h5py.File('mymodel.h5', mode='r') model_config = f.attrs.get('model_config') # 手动适配编码格式 if isinstance(model_config, bytes): model_config = model_config.decode('utf-8') model_config = json.loads(model_config) # 加载模型结构和权重 model = model_from_json(model_config) model.load_weights('mymodel.h5') f.close()
另外注意本地加载时优先使用TensorFlow自带的keras(from tensorflow import keras),不要使用单独安装的keras包,可避免额外的版本不匹配问题。
内容的提问来源于stack exchange,提问作者ℕʘʘḆḽḘ
相关产品推荐
相关产品推荐

