diff options
author | Gian Marco Iodice <gianmarco.iodice@arm.com> | 2017-08-29 16:05:25 +0100 |
---|---|---|
committer | Anthony Barbier <anthony.barbier@arm.com> | 2018-11-02 16:35:24 +0000 |
commit | 06b184ac568dc974986bae680957c4477f8ef6ca (patch) | |
tree | fa97d020f81f9a17edb6b50394f2bdf46f810ce9 /tests/validation/CPP/DequantizationLayer.cpp | |
parent | 351c20a361521101307d365a4f91ad883fa272ea (diff) | |
download | ComputeLibrary-06b184ac568dc974986bae680957c4477f8ef6ca.tar.gz |
COMPMID-439 - Refactored NEQuantizationLayer and NEQuantizationLayer in order to support 3D input tensors
Change-Id: I03eac2108a30bed56d40dfd52e75577a35d492e0
Reviewed-on: http://mpd-gerrit.cambridge.arm.com/85783
Tested-by: Kaizen <jeremy.johnson+kaizengerrit@arm.com>
Reviewed-by: Michele DiGiorgio <michele.digiorgio@arm.com>
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Diffstat (limited to 'tests/validation/CPP/DequantizationLayer.cpp')
-rw-r--r-- | tests/validation/CPP/DequantizationLayer.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/tests/validation/CPP/DequantizationLayer.cpp b/tests/validation/CPP/DequantizationLayer.cpp index 1c7ec25255..33096a1d81 100644 --- a/tests/validation/CPP/DequantizationLayer.cpp +++ b/tests/validation/CPP/DequantizationLayer.cpp @@ -32,23 +32,35 @@ namespace validation namespace reference { template <typename T, typename std::enable_if<std::is_integral<T>::value, int>::type> -SimpleTensor<float> dequantization_layer(const SimpleTensor<T> &src, float min, float max) +SimpleTensor<float> dequantization_layer(const SimpleTensor<T> &src, const SimpleTensor<float> &min_max) { // Create reference SimpleTensor<float> dst{ src.shape(), DataType::F32 }; - const float range = max - min; - const float scaling = range / 255.0f; + // Compute reference + const int width = src.shape().x(); + const int height = src.shape().y(); + const int depth = src.shape().z(); + const int stride_w = width * height * depth; + const int num_batches = min_max.shape().total_size_upper(1); - for(int i = 0; i < src.num_elements(); ++i) + for(int k = 0; k < num_batches; ++k) { - dst[i] = (static_cast<float>(src[i]) * scaling) + min; + const float min = min_max[k * 2 + 0]; + const float max = min_max[k * 2 + 1]; + const float range = max - min; + const float scaling = range / 255.0f; + + for(int i = 0; i < stride_w; ++i) + { + dst[i + k * stride_w] = (static_cast<float>(src[i + k * stride_w]) * scaling) + min; + } } return dst; } -template SimpleTensor<float> dequantization_layer(const SimpleTensor<uint8_t> &src, float min, float max); +template SimpleTensor<float> dequantization_layer(const SimpleTensor<uint8_t> &src, const SimpleTensor<float> &min_max); } // namespace reference } // namespace validation } // namespace test |