Keras模型加载时对象解析错误:raise ValueError()

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()
...

其他的类似对象解析错误都可以尝试此种方式解决。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。