无法将具有自定义图层的keras模型保存到tf lite文件

时间:2019-07-23 12:34:50

标签: python tensorflow keras tensorflow-lite

我想将Mask-RCNN移植到tensorflow lite以便能够在我的android设备上使用它。 Tensorflow lite有一些教程展示了如何执行此操作,但是当您的模型具有扩展keras图层类的图层时,它们的说明将失败。特别是,这是我得到的错误:

/usr/local/lib/python3.5/dist-packages/tensorflow/python/keras/layers/serialization.py in deserialize(config, custom_objects)
     87       module_objects=globs,
     88       custom_objects=custom_objects,
---> 89       printable_module_name='layer')

/usr/local/lib/python3.5/dist-packages/tensorflow/python/keras/utils/generic_utils.py in deserialize_keras_object(identifier, module_objects, custom_objects, printable_module_name)
    179     config = identifier
    180     (cls, cls_config) = class_and_config_for_serialized_keras_object(
--> 181         config, module_objects, custom_objects, printable_module_name)
    182 
    183     if hasattr(cls, 'from_config'):

/usr/local/lib/python3.5/dist-packages/tensorflow/python/keras/utils/generic_utils.py in class_and_config_for_serialized_keras_object(config, module_objects, custom_objects, printable_module_name)
    164     cls = module_objects.get(class_name)
    165     if cls is None:
--> 166       raise ValueError('Unknown ' + printable_module_name + ': ' + class_name)
    167   return (cls, config['config'])
    168 

ValueError: Unknown layer: ProposalLayer

我用来导入keras模型的代码是:

converter = tf.lite.TFLiteConverter.from_keras_model_file('mrcnn.h5')

您知道如何解决此问题吗?

2 个答案:

答案 0 :(得分:0)

保存Keras-h5仅了解标准图层。

这里有三种可能的解决方法:

1)from_keras_model方法具有一个称为custom_objects={"ProposalLayer":my_layers.ProposalLayer}的参数。如果您将其传递给班级:UIViewControllerRepresentable可能就可以了。

如重新加载模型here的要求

2)另一个选择是使用functional api定义模型,而keras保存和加载会更好地支持该模型。

3)使用save_format="tf"参数。 TensorFlow-SavedModel可能不存在此问题,因为它保存了较低级别的表示形式。

答案 1 :(得分:-1)

custom_objects={"ProposalLayer":ProposalLayer}