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

将预训练的Tensorflow模型转换为Tf-lite时的nan输出

严开宇
2023-03-14

我们在转换预应变张量流模型时遇到问题,我们将该模型作为以下文件

snapshot_140.ckpt.index

snapshot_140.ckpt.meta

snapshot_140.ckpt.data-00000-of-00001

当我们使用转换后的tflie文件进行预测时,所有的预测在加载正常的张量流模型时都给出了正确的回归预测

我们得到了上面的这些文件,从ckpt文件到张量流.pb图的转换是通过tensorflow.python.tools.freeze_graph工具进行的

然后TFlite_converter转换为 tflite 的工具

.pb在制作成tensorflow模型时效果良好。但tflite模型生成所有nan输出

一个(潜在的解决方案)来自这个问题:https://github.com/tensorflow/tensorflow/issues/22803?fbclid=IwAR0x25CEZjHAQ0dUFBVWa1V3lVcCVIpT4q7lbUUGS9T59w2aXqnUVtNCBHI#issuecomment-474249701

那幺,如果只给ckpt文件设置batch_ norm is_?

如果这真的是问题的解决方案

或者,我们应该如何修复tensorflow lite模型,以获得与tensorflow模型相同的输出

该代码用于获得tensorflow lite模型,该模型给出了nans

    import tensorflow as tf
    with tf.Session(config=tf.ConfigProto(allow_soft_placement=True, 
    log_device_placement=True)) as sess:

        saver = tf.train.import_meta_graph('snapshot_140.ckpt.meta')

        saver.restore(sess, "snapshot_140.ckpt")
        inp = tf.get_default_graph().get_tensor_by_name("tower_0/Placeholder:0")
        out = tf.get_default_graph().get_tensor_by_name("tower_0/out/BiasAdd:0")
        print(out)
        converter = tf.contrib.lite.TFLiteConverter.from_session(sess, [inp], [out])
        tflite_model = converter.convert()
        open("converted_model.tflite", "wb").write(tflite_model)

共有1个答案

申屠飞
2023-03-14

基本上,如果无法访问代码/架构,我甚至不知道如何运行推理!如果你不能运行推理,那么检查点有什么好处:)…我是这样解决的..我确实可以访问完整代码(EAST文本检测)和

  • 恢复了预先训练的检查点并运行了一个epoch,在此期间我确保将训练标志设置为FALSE(请注意,一个epoch太短,无法干扰在运行足够多的epoch以创建基线检查点后设置的变量。所以它无害)
  • 一旦纪元完成,我只需使用simple_save保存模型,然后生成一个pb文件
  • 使用常规的tflite转换器,在我的推理文件中,遵循张量流页面中的简单代码来设置输入张量,从输出张量调用和提取值
  • 推断和我通过恢复模型和推断的其他模式得到的一样好。基本无损
  • 我本来可以使这个过程更简单的唯一方法是,如果我可以将ckpt文件直接转换为pb(使用bazel和冻结图),但是这将使我在推断时到达相同的位置,因为训练标志将保持不变

如果此解决方法没有帮助,请道歉

 类似资料:
  • 在使用进行实验时,我在将转换为时遇到了一个问题。 这是我的设置: 如果有人能解释转换失败的原因,那就太好了。

  • TensorFlow-Lite Android演示与它提供的原始模型mobileNet_quant_v1_224.tflite一起工作。参见:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite 他们还在这里提供了其他预训练的lite模型:https://github.com/tensorflow/

  • 我目前正在尝试将RNN模型转换为TF lite。在多次尝试失败后,我尝试运行此处存储库中给出的示例。由于层定义位置的变化,这也引发了错误。一旦修复了下面的代码 我继续出错 在使用tf.compat.v1.disable\u eager\u execution()禁用渴望执行后,我得到了错误 有人有在TensorFlow 2.0中将RNN(LSTM、GRU、CustomRNN)转换为TFLite的工

  • 我从Tensorflow Hub重新训练了一个mobilenet-v1图像分类模型,并使用toco对其进行转换,以便使用Tensorflow Lite进行推断。 但是,当我使用tflite模型运行推断时,它需要与我使用指定的输入大小不同的输入大小。 我如何在自己的数据上重新训练一个mobilenetv1量化模型? 下面是我尝试的步骤: > 从tensorflow for poets Codelab

  • (基本)C:\TensorFlow-master>Bazel run--Config=opt\//TensorFlow/contrib/lite/toco:toco--\--input_file=optimized_graph.pb\--output_file=abc.tflite\--input_format=tensorFlow_graphdef\--output_format=tflite\

  • 我在Tensorflow中训练了一个模型,因此可以产生的最大产出值为1.0。然后我将其转换为Tensorflow Lite以安装在android上,现在Tensorflow Lite模型产生的值远大于1.0。我可以做些什么来解决这个问题? 我用的是Tensorflow 2.5 tf模型-