如何解决tensorflow / lite / core / subgraph.cc Bytes所需的元素溢出数量节点号1CONV_2D无法准备 tflite
我正在尝试将CNN模型转换为tflite模型。我已成功将其转换,但是在尝试加载和运行模型时会发生此错误。 我正在开发一个Flutter应用程序。
它会初始化Tensorflow Lite运行时,但会引发此错误。
I/tflite (27856): Initialized TensorFlow Lite runtime.
E/flutter (27856): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: PlatformException(Failed to load model,Internal error: Unexpected failure when preparing tensor allocations: tensorflow/lite/core/subgraph.cc BytesRequired number of elements overflowed.
E/flutter (27856):
E/flutter (27856): Node number 1 (CONV_2D) failed to prepare.
解决方法
我想我已经解决了这个问题。
花了几天时间尝试解决此问题。我发现我用来转换的模型是ImagNet预训练的模型,即InceptionV3。问题可能是有些图层无法转换。
我使用了以下内容,它们工作得很好。
- MobileNet和MobileNetV2。
- NasNet移动版。
- 或者,如果您是深度学习的新手,并且不想训练或跳过深度学习部分,则可以使用Teachable Machine,然后轻松进行转换。
我希望这可以帮助你们!!谢谢
,最近几天,我遇到了完全相同的问题。我试图在Android上加载并运行tflite模型。我终于想出了解决问题的方法。
我正在使用以下方法创建模型:
model = Xception(include_top=False)
这里的重要部分是include_top=False
,以及默认参数input_shape=None
。
如果您查看Xception,Inception,MobileNet或其他内容(您可以找到here)的源代码,则在创建它们调用的第一层之前的某个时候您会看到
input_shape = imagenet_utils.obtain_input_shape(
input_shape,default_size=<default_size>,min_size=<min_size>,data_format=backend.image_data_format(),require_flatten=include_top,weights=weights)
已实现here,对我们来说最重要的部分是:
if input_shape:
...
else:
if require_flatten:
input_shape = default_shape
else:
if data_format == 'channels_first':
input_shape = (3,None,None)
else:
input_shape = (None,3)
因此,如果我没记错的话,当我们将include_top
设置为False
时,不是获得默认形状,而是以不确定的行数和列数结束。我不确定如何将其转换为tflite,尽管在转换过程中没有出现任何错误,但实际上Android似乎无法使用它(可能等效于设置无限的图像大小)。因此,在初始化解释器时出现此错误:
BytesRequired元素溢出数量
当我在构造函数中设置正确的input_shape
参数时,即
model = Xception(include_top=False,weights=None,input_shape=(rows,cols,channels))
然后,转换后的模型在Android上运行正常。
关于在相同情况下为何要使用MobileNetV2正确初始化的原因,即通过像这样创建模型:
model = MobileNetV2(include_top=False)
我无法解释...
希望这为您的原始问题提供了答案。
,实际上,这是在文档中指定的,例如在Xception中:
input_shape: optional shape tuple,only to be specified if `include_top` is False (otherwise the input shape has to be `(299,299,3)`. It should have exactly 3 inputs channels,and width and height should be no smaller than 71. E.g. `(150,150,3)` would be one valid value.
尽管是MobileNetV2:
input_shape: Optional shape tuple,to be specified if you would like to use a model with an input image resolution that is not (224,224,3). It should have exactly 3 inputs channels (224,3). You can also omit this option if you would like to infer input_shape from an input_tensor. If you choose to include both input_tensor and input_shape then input_shape will be used if they match,if the shapes do not match then we will throw an error. E.g. `(160,160,3)` would be one valid value.
虽然不是很清晰。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。