python - 无法将具有自定义图层的 keras 模型保存到 tf 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')
你知道如何解决这个问题吗?
解决方案
Keras-h5 保存只知道标准层。
这里有三种可能的修复方法:
1) from_keras_model方法有一个名为custom_objects
. 如果您的类正确实现了 get_config,并且您将其传递给您的类:custom_objects={"ProposalLayer":my_layers.ProposalLayer}
它可能会起作用。
2) 另一种选择是使用功能 api定义模型,keras 保存和加载更好地支持它。
3) 如果你可以使用不同的文件格式:试试这个save_format="tf"
参数。TensorFlow-SavedModel 可能没有这个问题,因为它保存了较低级别的表示。
推荐阅读
- javascript - 访问对象数组的属性
- javascript - 无效的访问令牌 Dropbox API Github 页面
- python - 运行 Fabric 任务时是否可以将环境变量传递给远程 ssh 服务器?
- if-statement - 优化/加快 Google 表格中的计算时间
- sql - 使用 SQL 从表中删除重复项
- python - Python Struct.Unpack 中的对齐/打包
- android - 三星 S7 在接收高优先级 FCM 消息时从后台启动 Intent 时崩溃
- laravel - 函数 LibraryClearanceTableSeeder 的参数太少
- node.js - 如何从 Json Web Token 中获取当前用户的名称?
- r - 如何仅更改 POSIXct 值中的年份值