Problem:
在使用 keras-bert 写模型的时候,模型加载出现:
raise ValueError('Unknown ' + printable_module_name + ': ' + class_name)
ValueError: Unknown layer: SeqSelfAttention
原因在于构建模型的时候使用了非Keras官方的包里面的层对象,而load_model()
本身内部只会加载Keras官方包,所以出现layer层对象找不到的问题。
同样类似的还有度量函数(metric function)找不到:
raise ValueError(
ValueError: Unknown metric function: binary_precision/binary_recall/binary_f1_score
原因在于使用了来自 keras_metrics 的第三方包的度量函数做模型评估.
Solution:
load_model()
可以传递一个custom_objects
字典,来告诉Keras该如何解析未知的配置对象:
...
custom_objects = SeqSelfAttention.get_custom_objects() #keras-bert
custom_objects['binary_precision']=binary_precision() #keras-metrics
custom_objects['binary_recall']=binary_recall() #keras-metrics
custom_objects['binary_f1_score']=binary_f1_score() #keras-metrics
model = load_model('./model.h5',custom_objects=custom_objects)
model.summary()
...
其他的类似对象解析错误都可以尝试此种方式解决。
网友评论