【keras】load model時出現Missing Layer錯誤

問題描述:訓練結束後,保存model爲hdf5和yaml格式的文件

yamlFilename = os.path.join(dir,filename)
yamlModel = model.toyaml()
with open(yamlFilename, "w") as yamlFile:
    yamlFile.write(yamlModel)

隨後load model

with open(chkptFilename,'r') as f:
    model_yaml = f.read()
model = KM.model_from_yaml(model_yaml,customs_objects={"dict":dict})
model.load_weights(weightFilename)

但是報錯

問題分析:經過debug分析,原因出在model建立過程中前面lambda層的inbound_node列表中含有後面層,因此從上到下load時,會找不到後面層。重新建立一次model,然後用model.summary() 可以看出其中的原因。

出現這種情況,可能的原因在於,該lambda層在其他py文件中定義,然後import進來,前後多次用到這個lambda層的話,在模型編譯過程中,該lambda層可能只編譯了一次,前後層共用之,導致後面層結點出現在前面層的inbound_node列表中。
解決辦法: 不要在其他py文件中自定義lambda層,直接將其定義在model建立的文件中。或者直接繼承Layer層,在其他py文件中重新自定義該層。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章