TFLite通过C++获取输入和输出来判断故障。

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

我试图在x86_64系统上运行TfLite模型。看起来一切都很正常。但是当我试图用 typed_input_tensor(0)获取输入或输出张量时,我得到一个空指针。

我的模型是一个简单的HelloWorldNN。

import tensorflow as tf
import numpy as np
from tensorflow import keras

model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
model.compile(optimizer='sgd', loss='mean_squared_error')

xs = np.array([-1.0,  0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)

model.fit(xs, ys, epochs=10)

print(model.predict([10.0]))

model.summary()

converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
open("linear.tflite","wb").write(tflite_model)

对于C++部分,我克隆了tensorflow的git,检查了d855adfc5a0195788bf5f92c3c7352e638aa1109的提交。这是我计划使用Coral硬件所必须的提交。我建立了 tensorflow-lite.a 并将其链接到我的应用程序。


        std::unique_ptr<tflite::FlatBufferModel> model = 
       tflite::FlatBufferModel::BuildFromFile("linear.tflite");



        if (tflite::InterpreterBuilder(*model, resolver)(&interpreter) != kTfLiteOk) {
            std::cerr << "Failed to build interpreter." << std::endl;
        }


        if (interpreter->AllocateTensors() != kTfLiteOk) {
            std::cerr << "Failed to allocate tensors." << std::endl;
        }
        std::cout << "Number of tensors" << interpreter->tensors_size() <<" Num of Inputs "<< 
        tflite::PrintInterpreterState(interpreter.get());        
        float* input = interpreter->typed_input_tensor<float>(0);    

        interpreter->Invoke();

        float* output = interpreter->typed_output_tensor<float>(0);

如果我运行这段代码,输入和输出指针都是空指针。interpreter.get()的输出如下。

Number of tensors8 Num of Inputs 18446732345621392436
Interpreter has 8 tensors and 3 nodes
Inputs: 4
Outputs: 5

Tensor   0 dense/BiasAdd_int8   kTfLiteInt8  kTfLiteArenaRw          1 bytes ( 0.0 MB)  1 1
Tensor   1 dense/MatMul_bias    kTfLiteInt32   kTfLiteMmapRo          4 bytes ( 0.0 MB)  1
Tensor   2 dense/kernel/transpose kTfLiteInt8   kTfLiteMmapRo          1 bytes ( 0.0 MB)  1 1
Tensor   3 dense_input_int8     kTfLiteInt8  kTfLiteArenaRw          1 bytes ( 0.0 MB)  1 1
Tensor   4 dense_input          kTfLiteFloat32  kTfLiteArenaRw          4 bytes ( 0.0 MB)  1 1
Tensor   5 dense/BiasAdd        kTfLiteFloat32  kTfLiteArenaRw          4 bytes ( 0.0 MB)  1 1
Tensor   6 (null)               kTfLiteNoType  kTfLiteMemNone          0 bytes ( 0.0 MB)  (null)
Tensor   7 (null)               kTfLiteNoType  kTfLiteMemNone          0 bytes ( 0.0 MB)  (null)

Node   0 Operator Builtin Code 114 QUANTIZE
  Inputs: 4
  Outputs: 3
Node   1 Operator Builtin Code   9 FULLY_CONNECTED
  Inputs: 3 2 1
  Outputs: 0
Node   2 Operator Builtin Code   6 DEQUANTIZE
  Inputs: 0
  Outputs: 5`

我不知道我的错误在哪里。在tensorflow 1.15的时候还能用。但是1.15我不能用Coral硬件了。我将感激任何帮助

c++ tensorflow tensorflow-lite google-coral
1个回答
0
投票

好吧,我发现了我的问题。我没有更新包含的文件。这些文件仍然是1.15的文件。)

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