我试图在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硬件了。我将感激任何帮助
好吧,我发现了我的问题。我没有更新包含的文件。这些文件仍然是1.15的文件。)