blob: 594f428908a70b63e1347c1d02a213462de942e8 [file] [log] [blame]
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5#include "Debug.hpp"
6
7#include <boost/numeric/conversion/cast.hpp>
8
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00009#include <algorithm>
10#include <iostream>
11
12namespace armnn
13{
14
15template <typename T>
16void Debug(const TensorInfo& inputInfo,
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +000017 const T* inputData,
Nattapat Chaimanowong964e9552019-03-26 11:03:26 +000018 LayerGuid guid,
19 const std::string& layerName,
20 unsigned int slotIndex)
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +000021{
22 const unsigned int numDims = inputInfo.GetNumDimensions();
23 const unsigned int numElements = inputInfo.GetNumElements();
24 const TensorShape& inputShape = inputInfo.GetShape();
25
26 unsigned int strides[numDims];
27 strides[numDims - 1] = inputShape[numDims - 1];
28
29 for (unsigned int i = 2; i <= numDims; i++)
30 {
31 strides[numDims - i] = strides[numDims - i + 1] * inputShape[numDims - i];
32 }
33
34 std::cout << "{ ";
Nattapat Chaimanowong964e9552019-03-26 11:03:26 +000035 std::cout << "\"layerGuid\": " << guid << ", ";
36 std::cout << "\"layerName\": \"" << layerName << "\", ";
37 std::cout << "\"outputSlot\": " << slotIndex << ", ";
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +000038 std::cout << "\"shape\": ";
39
40 std::cout << "[";
41 for (unsigned int i = 0; i < numDims; i++)
42 {
43 std::cout << inputShape[i];
44 if (i != numDims - 1)
45 {
46 std::cout << ", ";
47 }
48 }
49 std::cout << "], ";
50
51 std::cout << "\"min\": "
52 << boost::numeric_cast<float>(*std::min_element(inputData, inputData + numElements)) << ", ";
53
54 std::cout << "\"max\": "
55 << boost::numeric_cast<float>(*std::max_element(inputData, inputData + numElements)) << ", ";
56
57 std::cout << "\"data\": ";
58
59 for (unsigned int i = 0; i < numElements; i++)
60 {
61 for (unsigned int j = 0; j < numDims; j++)
62 {
63 if (i % strides[j] == 0)
64 {
65 std::cout << "[" ;
66 }
67 }
68
69 std::cout << boost::numeric_cast<float>(inputData[i]);
70
71 for (unsigned int j = 0; j < numDims; j++)
72 {
73 if ((i+1) % strides[j] == 0)
74 {
75 std::cout << "]" ;
76 }
77 }
78
79 if (i != numElements - 1)
80 {
81 std::cout << ", ";
82 }
83 }
84
85 std::cout << " }" << std::endl;
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +000086}
87
88template void Debug<float>(const TensorInfo& inputInfo,
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +000089 const float* inputData,
Nattapat Chaimanowong964e9552019-03-26 11:03:26 +000090 LayerGuid guid,
91 const std::string& layerName,
92 unsigned int slotIndex);
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +000093
94template void Debug<uint8_t>(const TensorInfo& inputInfo,
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +000095 const uint8_t* inputData,
Nattapat Chaimanowong964e9552019-03-26 11:03:26 +000096 LayerGuid guid,
97 const std::string& layerName,
98 unsigned int slotIndex);
99
Matteo Martincigh49124022019-01-11 13:25:59 +0000100} // namespace armnn