当前位置: 首页 > 知识库问答 >
问题:

TFLITE的张力流模型

董建茗
2023-03-14

我有这个代码,用于使用tenorflow hub的预训练通用编码器构建语义搜索引擎。我无法转换为tlite。我已将模型保存到我的目录中。

导入模型:

module_path ="/content/drive/My Drive/4"
%time model = hub.load(module_path)
#print ("module %s loaded" % module_url)

#Create function for using modeltraining
def embed(input):
    return model(input)

根据数据训练模型:

## training the model
Model_USE= embed(data)

保存模型:

exported = tf.train.Checkpoint(v=tf.Variable(Model_USE))
exported.f = tf.function(
    lambda  x: exported.v * x,
    input_signature=[tf.TensorSpec(shape=None, dtype=tf.float32)])
export_dir = "/content/drive/My Drive/"
tf.saved_model.save(exported,export_dir)

保存工作正常,但当我转换到tflite它给出错误。

转换码:

converter = tf.lite.TFLiteConverter.from_saved_model(export_dir)
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS,
                                       tf.lite.OpsSet.SELECT_TF_OPS]
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

错误:

as_list() is not defined on an unknown TensorShape.

共有1个答案

莫誉
2023-03-14

首先,您应该需要添加一个数据生成器以具有转换器的代表性输入。就像这样:

def representative_data_gen():
  for input_value in dataset.take(100):
    yield [input_value]

输入值的形状必须为 >,就像它的批处理形状为1一样。它必须以列表形式生成;强制性的

您还应该声明需要哪种类型的优化,例如:

converter.optimizations = [tf.lite.Optimize.OPTIMIZE_FOR_SIZE]

尽管如此,我也遇到了根据网络结构选择不同转换器的问题,在这种情况下我不知道。因此,要使转换器干净运行,我只需:

converter = lite.TFLiteConverter.from_keras_model(model)
converter.experimental_new_converter = True
converter.optimizations = [lite.Optimize.DEFAULT]
tfmodel = converter.convert()

converter.experimental_new_converter=True用于转换RNN时的问题,如https://github.com/tensorflow/tensorflow/issues/34813

编辑:

如下所述:ValueError:只有第1维度支持无。Tensor“flatbuffer_data”的形状“[None,None,1,512]”无效。TFLite只允许数据的第一个维度为None,即批。所有其他尺寸必须固定。例如,尝试用tf.keras.preprocessing.sequence.pad_sequences填充它们。

然后,按照< code > tensor flow . org/guide/keras/Masking _ and _ padding 中所述,使用< code >嵌入或< code >屏蔽层屏蔽网络中的序列。

 类似资料:
  • 这是我当前抓取图像类型的代码。一旦它检测到了狗,我会试着让它看到检测的准确性。希望这有道理?

  • 我试图在张量流图中使用条件随机场损失。 我正在执行序列标记任务: 我有一系列元素作为输入。每个元素可以属于三个不同类中的一个。类以一种热编码方式表示:属于类0的元素由向量[表示。 我的输入标签(y)有大小(xx)。 我的网络产生相同形状的日志。 假设我所有的序列都有长度4。 这是我的代码: 我得到以下错误: 文件“/usr/local/lib/python2.7/dist-packages/ten

  • 我下面的代码产生了常规的tensorflow模型,但当我试图将其转换为tensorflow lite时,它不起作用,我遵循了以下文档。 https://www.tensorflow.org/tutorials/estimator/linear1 https://www.tensorflow.org/lite/guide/get_started 错误信息 文档摘录 TensorFlow Lite转换

  • 我是Tensorflow的初学者,请原谅我这个简单的问题,但我在哪里都找不到这个答案。我正致力于将mobilenet分段模型(http://download.tensorflow.org/models/deeplabv3_mnv2_pascal_trainval_2018_01_29.tar.gz)转换为Tensorflow-lite,用于移动推理,已经用了一个多星期了,但没有成功。我无法正确定义

  • 这是我在Android Studio上导入的tensorflow Lite模型的代码: 在此处输入图像描述 这是我运行应用程序时的输出: 在此处输入图像描述 我不明白,怎么才能得到模型输出?? 更新: 输出是6个元素的浮点数组,但我想要的是 Largesse 元素的索引,我尝试了这样的代码: 在此处输入图像描述 对吗??我在每个预测上都得到相同的输出