aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/contrib/lite/optional_debug_tools.cc
diff options
context:
space:
mode:
authorGravatar Andrew Selle <aselle@google.com>2017-11-10 10:35:35 -0800
committerGravatar Andrew Selle <aselle@andyselle.com>2017-11-10 16:14:42 -0800
commit0b15439f8f0f2d4755587f4096c3ea04cb199d23 (patch)
tree9aa4fc8162bf9b4ee50112a7b85703f70ca4df08 /tensorflow/contrib/lite/optional_debug_tools.cc
parent7ac140a5845553275427162aabd9d54987144b4a (diff)
Internal Change.
PiperOrigin-RevId: 175307445
Diffstat (limited to 'tensorflow/contrib/lite/optional_debug_tools.cc')
-rw-r--r--tensorflow/contrib/lite/optional_debug_tools.cc108
1 files changed, 108 insertions, 0 deletions
diff --git a/tensorflow/contrib/lite/optional_debug_tools.cc b/tensorflow/contrib/lite/optional_debug_tools.cc
new file mode 100644
index 0000000000..1f762e6688
--- /dev/null
+++ b/tensorflow/contrib/lite/optional_debug_tools.cc
@@ -0,0 +1,108 @@
+/* Copyright 2017 The TensorFlow Authors. All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+==============================================================================*/
+#include "tensorflow/contrib/lite/optional_debug_tools.h"
+
+namespace tflite {
+
+void PrintIntVector(const std::vector<int>& v) {
+ for (const auto& it : v) {
+ printf(" %d", it);
+ }
+ printf("\n");
+}
+
+void PrintTfLiteIntVector(const TfLiteIntArray* v) {
+ if (!v) {
+ printf(" (null)");
+ return;
+ }
+ for (int k = 0; k < v->size; k++) {
+ printf(" %d", v->data[k]);
+ }
+ printf("\n");
+}
+
+const char* TensorTypeName(TfLiteType type) {
+ switch (type) {
+ case kTfLiteNoType:
+ return "kTfLiteNoType";
+ case kTfLiteFloat32:
+ return "kTfLiteFloat32";
+ case kTfLiteInt32:
+ return "kTfLiteInt32";
+ case kTfLiteUInt8:
+ return "kTfLiteUInt8";
+ case kTfLiteInt64:
+ return "kTfLiteInt64";
+ case kTfLiteString:
+ return "kTfLiteString";
+ }
+ return "(invalid)";
+}
+
+const char* AllocTypeName(TfLiteAllocationType type) {
+ switch (type) {
+ case kTfLiteMemNone:
+ return "kTfLiteMemNone";
+ case kTfLiteMmapRo:
+ return "kTfLiteMmapRo";
+ case kTfLiteDynamic:
+ return "kTfLiteDynamic";
+ case kTfLiteArenaRw:
+ return "kTfLiteArenaRw";
+ case kTfLiteArenaRwPersistent:
+ return "kTfLiteArenaRwPersistent";
+ }
+ return "(invalid)";
+}
+
+// Prints a dump of what tensors and what nodes are in the interpreter.
+void PrintInterpreterState(Interpreter* interpreter) {
+ printf("Interpreter has %d tensors and %d nodes\n",
+ interpreter->tensors_size(), interpreter->nodes_size());
+ printf("Inputs:");
+ PrintIntVector(interpreter->inputs());
+ printf("Outputs:");
+ PrintIntVector(interpreter->outputs());
+ printf("\n");
+ for (int tensor_index = 0; tensor_index < interpreter->tensors_size();
+ tensor_index++) {
+ TfLiteTensor* tensor = interpreter->tensor(tensor_index);
+ printf("Tensor %3d %10s %15s %10zu bytes (%4.1f MB) ", tensor_index,
+ TensorTypeName(tensor->type), AllocTypeName(tensor->allocation_type),
+ tensor->bytes, float(tensor->bytes) / float(1 << 20));
+ PrintTfLiteIntVector(tensor->dims);
+ printf("\n");
+ }
+
+ for (int node_index = 0; node_index < interpreter->nodes_size();
+ node_index++) {
+ const std::pair<TfLiteNode, TfLiteRegistration>* node_and_reg =
+ interpreter->node_and_registration(node_index);
+ const TfLiteNode& node = node_and_reg->first;
+ const TfLiteRegistration& reg = node_and_reg->second;
+ printf("Node %3d Operator Builtin Code %3d\n", node_index,
+ reg.builtin_code);
+ printf(" Inputs:");
+ PrintTfLiteIntVector(node.inputs);
+ printf(" Outputs:");
+ PrintTfLiteIntVector(node.outputs);
+ }
+}
+
+// Prints a dump of what tensors and what nodes are in the interpreter.
+TfLiteStatus ValidateInterpreterState(const Interpreter* interpreter);
+
+} // namespace tflite