修改已保存Keras模型层名后加载报错:Graph disconnected
Keras 2.3.1修改输入层名后加载模型报错的解决方法
直接修改层的name属性只会改变层的显示名称,模型计算图内部的张量引用还是旧名称,保存再加载时,Keras会根据新层名查找对应输入张量,自然找不到,触发图断开错误。
正确的做法是重新构建模型,基于改名后的输入层重新建立计算图关联,步骤如下:
- 加载原模型,提取目标输入层并修改名称
- 基于改名后的输入层和原模型的输出层,重新创建模型实例
- 保存新模型,此时计算图的张量引用会同步更新为新层名
完整代码示例:
from keras.models import load_model, save_model from keras.models import Model # 加载原始训练好的模型 original_model = load_model('final_model.hdf5') # 定位并修改输入层名称 user_input_layer = original_model.get_layer('user_embedding_123') user_input_layer.name = 'user_embedding' item_input_layer = original_model.get_layer('item_embedding_284') item_input_layer.name = 'item_embedding' # 基于修改后的输入层和原模型输出,重新构建模型 new_model = Model( inputs=[user_input_layer.input, item_input_layer.input], outputs=original_model.output ) # 保存修改后的模型 save_model(new_model, "final_model_renamed.hdf5") # 验证加载是否正常 model_renamed = load_model('final_model_renamed.hdf5') print(model_renamed.summary())
关键说明
Keras的计算图依赖张量的名称关联,输入层的张量名称在创建时就已确定,修改层名不会自动更新张量的内部引用。重新构建模型时,会基于新的层名生成对应的张量引用,确保整个计算图的依赖关系完整。
内容的提问来源于stack exchange,提问作者Munichong
相关产品推荐
相关产品推荐

