到TFLITE的Tensorflow模型

问题描述 投票:0回答:1

我有这段代码,用于使用来自Tensorflow Hub的预训练通用编码器来构建语义搜索引擎。我无法转换成精英。我已将模型保存到目录中。

导入模型:

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.
tensorflow tensorflow-lite tensorflow-hub tf-lite
1个回答
1
投票

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

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

input value的形状必须为(1, your_iput_shape),就好像其批处理形状为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: None is only supported in the 1st dimension. Tensor 'flatbuffer_data' has invalid shape '[None, None, 1, 512]' TFLite仅允许数据的第一维为“无”,即批次。所有其他尺寸必须固定。尝试用tf.keras.preprocessing.sequence.pad_sequences填充它们。

然后按照tensorflow.org/guide/keras/masking_and_padding层或Embedding层中的说明掩盖网络中的序列。

© www.soinside.com 2019 - 2024. All rights reserved.