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

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

你可能感兴趣的:(Keras模型加载时对象解析错误:raise ValueError())