From 0d69f3c85d8bd27305e651a070918559f8fcda46 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EC=9D=B4=ED=95=9C=EC=A2=85/=EB=8F=99=EC=9E=91=EC=A0=9C?= =?utf8?q?=EC=96=B4Lab=28SR=29/Engineer/=EC=82=BC=EC=84=B1=EC=A0=84?= =?utf8?q?=EC=9E=90?= Date: Wed, 2 May 2018 19:16:33 +0900 Subject: [PATCH] Introduce OutputTensorDumper (#991) This class writes output tensors to generate golden data Signed-off-by: Hanjoung Lee --- tools/tflite_run/CMakeLists.txt | 1 + tools/tflite_run/src/output_tensor_dumper.cc | 28 ++++++++++++++++++++++++++++ tools/tflite_run/src/output_tensor_dumper.h | 26 ++++++++++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 tools/tflite_run/src/output_tensor_dumper.cc create mode 100644 tools/tflite_run/src/output_tensor_dumper.h diff --git a/tools/tflite_run/CMakeLists.txt b/tools/tflite_run/CMakeLists.txt index 9da790f..a3794bf 100644 --- a/tools/tflite_run/CMakeLists.txt +++ b/tools/tflite_run/CMakeLists.txt @@ -2,6 +2,7 @@ list(APPEND TFLITE_RUN_SRCS "src/tflite_run.cc") list(APPEND TFLITE_RUN_SRCS "src/operators.cc") list(APPEND TFLITE_RUN_SRCS "src/bin_image.cc") list(APPEND TFLITE_RUN_SRCS "src/args.cc") +list(APPEND TFLITE_RUN_SRCS "src/output_tensor_dumper.cc") add_executable(tflite_run ${TFLITE_RUN_SRCS}) target_include_directories(tflite_run PRIVATE src) diff --git a/tools/tflite_run/src/output_tensor_dumper.cc b/tools/tflite_run/src/output_tensor_dumper.cc new file mode 100644 index 0000000..c0659d4 --- /dev/null +++ b/tools/tflite_run/src/output_tensor_dumper.cc @@ -0,0 +1,28 @@ +#include "output_tensor_dumper.h" + +#include +#include + +#include "tensorflow/contrib/lite/interpreter.h" + +namespace TFLiteRun +{ + +OutputTensorDumper::OutputTensorDumper(tflite::Interpreter &interpreter) : _interpreter(interpreter) +{ + // DO NOTHING +} + +void OutputTensorDumper::dump(const std::string &filename) const +{ + // TODO Handle file open/write error + std::ofstream file(filename, std::ios::out | std::ios::binary); + for (const auto &o : _interpreter.outputs()) + { + const TfLiteTensor *tensor = _interpreter.tensor(o); + file.write(tensor->data.raw, tensor->bytes); + } + file.close(); +} + +} // end of namespace TFLiteRun diff --git a/tools/tflite_run/src/output_tensor_dumper.h b/tools/tflite_run/src/output_tensor_dumper.h new file mode 100644 index 0000000..2dad15d --- /dev/null +++ b/tools/tflite_run/src/output_tensor_dumper.h @@ -0,0 +1,26 @@ +#ifndef __TFLITE_RUN_TENSOR_DUMPER_H__ +#define __TFLITE_RUN_TENSOR_DUMPER_H__ + +#include + +namespace tflite +{ +class Interpreter; +} + +namespace TFLiteRun +{ + +class OutputTensorDumper +{ +public: + OutputTensorDumper(tflite::Interpreter &interpreter); + void dump(const std::string &filename) const; + +private: + tflite::Interpreter &_interpreter; +}; + +} // end of namespace TFLiteRun + +#endif // __TFLITE_RUN_TENSOR_DUMPER_H__ -- 2.7.4