tf2.3.0训练的tf.keras模型如何在tf1.12.0中加载
TensorFlow 2.3.0 模型跨版本迁移至1.12.0 免重训方案
你遇到的两个报错均为版本特性差异导致:Unknown layer: functional是因为TF2.x的Keras将函数式模型基类改为Functional,而TF1.12中不存在该类;Unrecognized keyword arguments: ragged是TF2.x导出的模型配置默认携带了TF1.12不支持的ragged张量相关参数。
方案1:清洗模型配置后导出加载
TF2.3.0 端修改后导出代码
import tensorflow as tf import json CNN_model=tf.keras.models.load_model('Real_Image_XAI_Models/Test_10_DC_R_Image.h5') # 权重保存逻辑保持不变 CNN_model.save_weights("Real_Image_XAI_Models/weights_only.h5") # 导出前清洗模型配置 raw_config = json.loads(CNN_model.to_json()) # 替换函数式模型类标识,适配TF1.12 raw_config['class_name'] = 'Model' # 遍历所有层配置,删除TF1.12不支持的参数 for layer in raw_config['config']['layers']: for invalid_key in ['ragged', 'dynamic', 'training']: if invalid_key in layer['config']: del layer['config'][invalid_key] # 导出清洗后的配置 with open('Real_Image_XAI_Models/model_config_clean.json', 'w') as f: json.dump(raw_config, f)
TF1.12.0 端修改后加载代码
import tensorflow as tf import json with open('Real_Image_XAI_Models/model_config_clean.json', 'r') as f: clean_config = json.load(f) # 直接加载清洗后的配置,无需添加custom_objects new_model = tf.keras.models.model_from_json(json.dumps(clean_config)) # 加载权重,若出现层匹配报错可添加by_name=True参数 new_model.load_weights('Real_Image_XAI_Models/weights_only.h5')
方案2:手动复刻结构加载权重(兼容性最高)
如果配置清洗后仍存在层参数不兼容问题,可直接在TF1.12环境下手动编写和TF2.3中结构完全一致的模型(层名称、输入输出维度、参数配置完全对应),不需要训练,直接调用load_weights加载导出的权重文件即可。
内容的提问来源于stack exchange,提问作者Lad4life
相关产品推荐
相关产品推荐

