aboutsummaryrefslogtreecommitdiff
path: root/src/backends
diff options
context:
space:
mode:
authorSadik Armagan <sadik.armagan@arm.com>2019-10-16 09:29:38 +0100
committerSadik Armagan <sadik.armagan@arm.com>2019-10-16 08:30:49 +0000
commit20bea0071d507772e303eb6f1c476bf1feac9be5 (patch)
tree901f087dbdbc97991217b846b9708426f6f20813 /src/backends
parent8d9590e5510b8ebdc4e0b2b31ce4b653b46fc02a (diff)
downloadarmnn-20bea0071d507772e303eb6f1c476bf1feac9be5.tar.gz
IVGCVSW-3895 Add EndToEndLayerTest for the Reference Implementation of LOG_SOFTMAX
Signed-off-by: Sadik Armagan <sadik.armagan@arm.com> Change-Id: I500f0b819be543dc5829990d363e5d911197c9ec
Diffstat (limited to 'src/backends')
-rw-r--r--src/backends/backendsCommon/common.mk1
-rw-r--r--src/backends/backendsCommon/test/CMakeLists.txt2
-rw-r--r--src/backends/backendsCommon/test/LogSoftmaxEndToEndTestImpl.cpp106
-rw-r--r--src/backends/backendsCommon/test/LogSoftmaxEndToEndTestImpl.hpp12
-rw-r--r--src/backends/reference/test/RefEndToEndTests.cpp7
5 files changed, 128 insertions, 0 deletions
diff --git a/src/backends/backendsCommon/common.mk b/src/backends/backendsCommon/common.mk
index 39b9e3524b..8b45b3766f 100644
--- a/src/backends/backendsCommon/common.mk
+++ b/src/backends/backendsCommon/common.mk
@@ -33,6 +33,7 @@ COMMON_TEST_SOURCES := \
test/CommonTestUtils.cpp \
test/InstanceNormalizationEndToEndTestImpl.cpp \
test/JsonPrinterTestImpl.cpp \
+ test/LogSoftmaxEndToEndTestImpl.cpp \
test/QuantizedLstmEndToEndTestImpl.cpp \
test/SpaceToDepthEndToEndTestImpl.cpp \
test/TensorCopyUtils.cpp \
diff --git a/src/backends/backendsCommon/test/CMakeLists.txt b/src/backends/backendsCommon/test/CMakeLists.txt
index c3ce02a953..797dc90952 100644
--- a/src/backends/backendsCommon/test/CMakeLists.txt
+++ b/src/backends/backendsCommon/test/CMakeLists.txt
@@ -26,6 +26,8 @@ list(APPEND armnnBackendsCommonUnitTests_sources
JsonPrinterTestImpl.hpp
LayerReleaseConstantDataTest.cpp
LayerTests.hpp
+ LogSoftmaxEndToEndTestImpl.cpp
+ LogSoftmaxEndToEndTestImpl.hpp
ConcatEndToEndTestImpl.hpp
MockBackend.cpp
MockBackend.hpp
diff --git a/src/backends/backendsCommon/test/LogSoftmaxEndToEndTestImpl.cpp b/src/backends/backendsCommon/test/LogSoftmaxEndToEndTestImpl.cpp
new file mode 100644
index 0000000000..f1e6242869
--- /dev/null
+++ b/src/backends/backendsCommon/test/LogSoftmaxEndToEndTestImpl.cpp
@@ -0,0 +1,106 @@
+//
+// Copyright © 2019 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "EndToEndTestImpl.hpp"
+#include "LogSoftmaxEndToEndTestImpl.hpp"
+
+#include <armnn/INetwork.hpp>
+
+#include <test/TestUtils.hpp>
+
+#include <boost/test/unit_test.hpp>
+
+namespace {
+
+template <typename armnn::DataType DataType>
+armnn::INetworkPtr CreateLogSoftmaxNetwork(const armnn::TensorShape& inputShape,
+ const armnn::TensorShape& outputShape,
+ const float beta,
+ const int axis,
+ const float qScale = 1.0f,
+ const int32_t qOffset = 0)
+{
+ using namespace armnn;
+
+ // Builds up the structure of the network.
+ INetworkPtr net(INetwork::Create());
+
+ TensorInfo inputTensorInfo(inputShape, DataType, qScale, qOffset);
+
+ LogSoftmaxDescriptor logSoftmaxDesc;
+ logSoftmaxDesc.m_Beta = beta;
+ logSoftmaxDesc.m_Axis = axis;
+
+ IConnectableLayer* logSoftmax = net->AddLogSoftmaxLayer(logSoftmaxDesc, "Log_Softmax");
+ IConnectableLayer* input = net->AddInputLayer(0, "input");
+ Connect(input, logSoftmax, inputTensorInfo, 0, 0);
+
+ TensorInfo outputTensorInfo(outputShape, DataType, qScale, qOffset);
+ IConnectableLayer* output = net->AddOutputLayer(0, "output");
+ Connect(logSoftmax, output, outputTensorInfo, 0, 0);
+
+ return net;
+}
+
+void LogSoftmaxEndToEnd(const std::vector<armnn::BackendId>& backends,
+ armnn::TensorInfo& inputTensorInfo,
+ armnn::TensorInfo& outputTensorInfo,
+ std::vector<float>& inputData,
+ std::vector<float>& expectedOutputData,
+ const float beta,
+ const int axis)
+{
+ using namespace armnn;
+
+ // Builds up the structure of the network
+ INetworkPtr net = CreateLogSoftmaxNetwork<DataType::Float32>(inputTensorInfo.GetShape(),
+ outputTensorInfo.GetShape(),
+ beta,
+ axis);
+
+ BOOST_TEST_CHECKPOINT("Create a network");
+
+ std::map<int, std::vector<float>> inputTensorData = { {0, inputData} };
+ std::map<int, std::vector<float>> expectedOutputTensorData = { {0, expectedOutputData} };
+
+ EndToEndLayerTestImpl<DataType::Float32, DataType::Float32>(move(net),
+ inputTensorData,
+ expectedOutputTensorData,
+ backends);
+}
+
+} // anonymous namespace
+
+void LogSoftmaxEndToEndTest(const std::vector<armnn::BackendId>& defaultBackends)
+{
+ using namespace armnn;
+
+ const float beta = 10.0f; // non-default beta
+ const int axis = 3; // positive axis
+
+ const TensorShape inputShape{1, 1, 2, 4};
+ TensorInfo inputTensorInfo(inputShape, DataType::Float32);
+
+ const TensorShape outputShape{1, 1, 2, 4};
+ TensorInfo outputTensorInfo(outputShape, DataType::Float32);
+
+ std::vector<float> inputData = std::vector<float>({
+ 0.0f, -0.6f, 0.2f, 0.4f,
+ 0.3f, -0.2f, 1.0f, 0.1f
+ });
+
+ std::vector<float> expectedOutputData = std::vector<float>({
+ -4.14297f, -10.14297f, -2.14297f, -0.14297f,
+ -7.00104f, -12.00104f, -0.00104087f, -9.00104f
+ });
+
+ LogSoftmaxEndToEnd(defaultBackends,
+ inputTensorInfo,
+ outputTensorInfo,
+ inputData,
+ expectedOutputData,
+ beta,
+ axis);
+} \ No newline at end of file
diff --git a/src/backends/backendsCommon/test/LogSoftmaxEndToEndTestImpl.hpp b/src/backends/backendsCommon/test/LogSoftmaxEndToEndTestImpl.hpp
new file mode 100644
index 0000000000..98f5be7a56
--- /dev/null
+++ b/src/backends/backendsCommon/test/LogSoftmaxEndToEndTestImpl.hpp
@@ -0,0 +1,12 @@
+//
+// Copyright © 2019 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <armnn/BackendId.hpp>
+
+#include <vector>
+
+void LogSoftmaxEndToEndTest(const std::vector<armnn::BackendId>& defaultBackends);
diff --git a/src/backends/reference/test/RefEndToEndTests.cpp b/src/backends/reference/test/RefEndToEndTests.cpp
index 8b768abdee..370ef6599b 100644
--- a/src/backends/reference/test/RefEndToEndTests.cpp
+++ b/src/backends/reference/test/RefEndToEndTests.cpp
@@ -14,6 +14,7 @@
#include <backendsCommon/test/DetectionPostProcessEndToEndTestImpl.hpp>
#include <backendsCommon/test/GatherEndToEndTestImpl.hpp>
#include <backendsCommon/test/InstanceNormalizationEndToEndTestImpl.hpp>
+#include <backendsCommon/test/LogSoftmaxEndToEndTestImpl.hpp>
#include <backendsCommon/test/PreluEndToEndTestImpl.hpp>
#include <backendsCommon/test/ResizeEndToEndTestImpl.hpp>
#include <backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp>
@@ -778,6 +779,12 @@ BOOST_AUTO_TEST_CASE(RefDetectionPostProcessFastNmsUint8Test)
1.0f, 1, 0.01f, 0, 0.5f, 0);
}
+// LogSoftmax
+BOOST_AUTO_TEST_CASE(RefLogSoftmaxEndToEndTest)
+{
+ LogSoftmaxEndToEndTest(defaultBackends);
+}
+
BOOST_AUTO_TEST_CASE(RefPreluEndToEndTestFloat32)
{
PreluEndToEndNegativeTest<armnn::DataType::Float32>(defaultBackends);