1 // Copyright (C) 2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
10 #include <unordered_map>
15 struct TensorStatistic {
16 TensorStatistic(float* data, size_t count, size_t nbuckets = 1000);
17 float getMaxValue() const;
18 float getMinValue()const;
32 virtual void addStatistics(const std::string& name, size_t channel, float* data, size_t count) = 0;
33 void addStatistics(const std::string& name, size_t channel, short* data, size_t count);
34 void addStatistics(const std::string& name, size_t channel, uint8_t* data, size_t count);
35 virtual void registerLayer(const std::string& name, size_t batch, size_t channels);
36 inline const std::list<layerInfo>& registeredLayers() const {
37 return _registeredLayers;
39 virtual void getDataMinMax(const std::string& name, size_t channel, float& min, float& max, float threshold = 100.f) = 0;
40 virtual size_t getNumberChannels(const std::string& name) const = 0;
42 std::list<layerInfo> _registeredLayers;
46 class simpleDataStats : public dataStats {
48 void addStatistics(const std::string& name, size_t channel, float* data, size_t count);
49 void registerLayer(const std::string& name, size_t batch, size_t channels);
50 size_t getNumberChannels(const std::string& name) const;
51 void getDataMinMax(const std::string& name, size_t channel, float& min, float& max, float threshold = 100.f);
54 float _min = std::numeric_limits<float>::max();
55 float _max = std::numeric_limits<float>::min();
57 std::unordered_map<std::string, std::unordered_map<size_t, statsPair>> _data;
60 class AggregatedDataStats : public dataStats {
62 typedef std::unordered_map<std::string, std::map<size_t, std::vector<TensorStatistic>>> internalData;
64 void addStatistics(const std::string& name, size_t channel, float* data, size_t count);
65 void getDataMinMax(const std::string& name, size_t channel, float& min, float& max, float threshold = 100.f);
66 size_t getNumberChannels(const std::string& name) const;
67 void registerLayer(const std::string& name, size_t batch, size_t channels);