aboutsummaryrefslogtreecommitdiff
path: root/tests/validation/reference/DequantizationLayer.cpp
diff options
context:
space:
mode:
authorGeorgios Pinitas <georgios.pinitas@arm.com>2019-02-18 20:08:02 +0000
committerGiuseppe Rossini <giuseppe.rossini@arm.com>2019-03-05 11:44:18 +0000
commit574775c7fa78a094bbeb7f9f87aca832936884e2 (patch)
treea405e7a265865acc1348860514de28de2835ce24 /tests/validation/reference/DequantizationLayer.cpp
parent79fa9a22022824735986f74557bf38095eb2284d (diff)
downloadComputeLibrary-574775c7fa78a094bbeb7f9f87aca832936884e2.tar.gz
COMPMID-1937: Adds support for DequantizationLayer for NEON/CL.
Change-Id: I4b73edd176a277294e0e42e642460bc61210778a Signed-off-by: Georgios Pinitas <georgios.pinitas@arm.com> Reviewed-on: https://review.mlplatform.org/c/744 Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Giuseppe Rossini <giuseppe.rossini@arm.com>
Diffstat (limited to 'tests/validation/reference/DequantizationLayer.cpp')
-rw-r--r--tests/validation/reference/DequantizationLayer.cpp32
1 files changed, 10 insertions, 22 deletions
diff --git a/tests/validation/reference/DequantizationLayer.cpp b/tests/validation/reference/DequantizationLayer.cpp
index 33096a1d81..df50c14ec7 100644
--- a/tests/validation/reference/DequantizationLayer.cpp
+++ b/tests/validation/reference/DequantizationLayer.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2019 ARM Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -31,36 +31,24 @@ 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, const SimpleTensor<float> &min_max)
+template <typename T>
+SimpleTensor<T> dequantization_layer(const SimpleTensor<uint8_t> &src)
{
- // Create reference
- SimpleTensor<float> dst{ src.shape(), DataType::F32 };
+ const DataType dst_data_type = std::is_same<T, float>::value ? DataType::F32 : DataType::F16;
+ const QuantizationInfo &quantization_info = src.quantization_info();
- // 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);
+ SimpleTensor<T> dst{ src.shape(), dst_data_type };
- for(int k = 0; k < num_batches; ++k)
+ for(int i = 0; i < src.num_elements(); ++i)
{
- 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;
- }
+ dst[i] = static_cast<T>(quantization_info.dequantize(src[i]));
}
return dst;
}
-template SimpleTensor<float> dequantization_layer(const SimpleTensor<uint8_t> &src, const SimpleTensor<float> &min_max);
+template SimpleTensor<half> dequantization_layer(const SimpleTensor<uint8_t> &src);
+template SimpleTensor<float> dequantization_layer(const SimpleTensor<uint8_t> &src);
} // namespace reference
} // namespace validation
} // namespace test