diff options
Diffstat (limited to 'src/backends')
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); |