From e662a940d3378cfe669ff7e259a6911713fc0df9 Mon Sep 17 00:00:00 2001 From: Aron Virginas-Tar Date: Mon, 14 Oct 2019 15:12:00 +0100 Subject: IVGCVSW-3975 Add reference workload for LOG_SOFTMAX Signed-off-by: Aron Virginas-Tar Change-Id: I10bb7133e0e2d6d7199abdf39562b1226bbbd3e7 --- .../test/layerTests/LogSoftmaxTestImpl.cpp | 251 +++++++++++++++++++++ .../test/layerTests/LogSoftmaxTestImpl.hpp | 33 +++ 2 files changed, 284 insertions(+) create mode 100644 src/backends/backendsCommon/test/layerTests/LogSoftmaxTestImpl.cpp create mode 100644 src/backends/backendsCommon/test/layerTests/LogSoftmaxTestImpl.hpp (limited to 'src/backends/backendsCommon/test/layerTests') diff --git a/src/backends/backendsCommon/test/layerTests/LogSoftmaxTestImpl.cpp b/src/backends/backendsCommon/test/layerTests/LogSoftmaxTestImpl.cpp new file mode 100644 index 0000000000..0b73d37305 --- /dev/null +++ b/src/backends/backendsCommon/test/layerTests/LogSoftmaxTestImpl.cpp @@ -0,0 +1,251 @@ +// +// Copyright © 2019 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "LogSoftmaxTestImpl.hpp" + +#include +#include + +#include + +#include +#include +#include + +#include +#include +#include + +#include + +namespace +{ + +template> +LayerTestResult LogSoftmaxTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::TensorInfo& inputInfo, + const armnn::TensorInfo& outputInfo, + const std::vector& inputValues, + const std::vector& expectedOutputValues, + armnn::LogSoftmaxQueueDescriptor descriptor, + float qScale = 1.0f, + int32_t qOffset = 0) +{ + LayerTestResult result(outputInfo); + result.outputExpected = + MakeTensor(outputInfo, QuantizedVector(qScale, qOffset, expectedOutputValues)); + + std::unique_ptr inputHandle = workloadFactory.CreateTensorHandle(inputInfo); + std::unique_ptr outputHandle = workloadFactory.CreateTensorHandle(outputInfo); + + armnn::WorkloadInfo info; + + AddInputToWorkload(descriptor, info, inputInfo, inputHandle.get()); + AddOutputToWorkload(descriptor, info, outputInfo, outputHandle.get()); + + std::unique_ptr workload = workloadFactory.CreateLogSoftmax(descriptor, info); + + inputHandle->Allocate(); + outputHandle->Allocate(); + + auto inputTensor = MakeTensor(inputInfo, QuantizedVector(qScale, qOffset, inputValues)); + CopyDataToITensorHandle(inputHandle.get(), inputTensor.origin()); + + workload->Execute(); + + CopyDataFromITensorHandle(result.output.origin(), outputHandle.get()); + + return result; +} + +} // anonymous namespace + +template +LayerTestResult LogSoftmaxTest1( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) +{ + const armnn::TensorShape inputOutputShape{1, 1, 2, 4}; + + armnn::TensorInfo inputTensorInfo(inputOutputShape, ArmnnType); + armnn::TensorInfo outputTensorInfo(inputOutputShape, ArmnnType); + + std::vector inputValues + { + 0.f, -6.f, 2.f, 4.f, + 3.f, -2.f, 10.f, 1.f + }; + + std::vector expectedOutputValues + { + -4.14297f, -10.14297f, -2.14297f, -0.14297f, + -7.00104f, -12.00104f, -0.00105f, -9.00104f + }; + + armnn::LogSoftmaxQueueDescriptor descriptor; + descriptor.m_Parameters.m_Beta = 1.0f; // default beta + descriptor.m_Parameters.m_Axis = -1; // default axis + + return LogSoftmaxTestImpl( + workloadFactory, + memoryManager, + inputTensorInfo, + outputTensorInfo, + inputValues, + expectedOutputValues, + descriptor); +} + +template +LayerTestResult LogSoftmaxTest2( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) +{ + const armnn::TensorShape inputOutputShape{1, 1, 2, 4}; + + armnn::TensorInfo inputTensorInfo(inputOutputShape, ArmnnType); + armnn::TensorInfo outputTensorInfo(inputOutputShape, ArmnnType); + + std::vector inputValues + { + 0.f, -6.f, 2.f, 4.f, + 3.f, -2.f, 10.f, 1.f + }; + + std::vector expectedOutputValues + { + -4.14297f, -10.14297f, -2.14297f, -0.14297f, + -7.00104f, -12.00104f, -0.00105f, -9.00104f + }; + + armnn::LogSoftmaxQueueDescriptor descriptor; + descriptor.m_Parameters.m_Beta = 1.0f; // default beta + descriptor.m_Parameters.m_Axis = 3; // positive axis + + return LogSoftmaxTestImpl( + workloadFactory, + memoryManager, + inputTensorInfo, + outputTensorInfo, + inputValues, + expectedOutputValues, + descriptor); +} + +template +LayerTestResult LogSoftmaxTest3( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) +{ + const armnn::TensorShape inputOutputShape{1, 1, 2, 4}; + + armnn::TensorInfo inputTensorInfo(inputOutputShape, ArmnnType); + armnn::TensorInfo outputTensorInfo(inputOutputShape, ArmnnType); + + std::vector inputValues + { + 0.0f, -0.6f, 0.2f, 0.4f, + 0.3f, -0.2f, 1.0f, 0.1f + }; + + std::vector expectedOutputValues + { + -4.14297f, -10.14297f, -2.14297f, -0.14297f, + -7.00104f, -12.00104f, -0.00105f, -9.00104f + }; + + armnn::LogSoftmaxQueueDescriptor descriptor; + descriptor.m_Parameters.m_Beta = 10.0f; // non-default beta + descriptor.m_Parameters.m_Axis = 3; // positive axis + + return LogSoftmaxTestImpl( + workloadFactory, + memoryManager, + inputTensorInfo, + outputTensorInfo, + inputValues, + expectedOutputValues, + descriptor); +} + +template +LayerTestResult LogSoftmaxTest4( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) +{ + const armnn::TensorShape inputOutputShape{1, 1, 2, 4}; + + armnn::TensorInfo inputTensorInfo(inputOutputShape, ArmnnType); + armnn::TensorInfo outputTensorInfo(inputOutputShape, ArmnnType); + + std::vector inputValues + { + 0.f, -6.f, 2.f, 4.f, + 3.f, -2.f, 10.f, 1.f + }; + + std::vector expectedOutputValues + { + -3.048587f, -4.018149f, -8.000336f, -0.048587f, + -0.048587f, -0.018149f, -0.000335f, -3.048587f + }; + + armnn::LogSoftmaxQueueDescriptor descriptor; + descriptor.m_Parameters.m_Beta = 1.0f; // default beta + descriptor.m_Parameters.m_Axis = -2; // negative axis + + return LogSoftmaxTestImpl( + workloadFactory, + memoryManager, + inputTensorInfo, + outputTensorInfo, + inputValues, + expectedOutputValues, + descriptor); +} + +template LayerTestResult, 4> +LogSoftmaxTest1( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +template LayerTestResult, 4> +LogSoftmaxTest2( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +template LayerTestResult, 4> +LogSoftmaxTest3( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +template LayerTestResult, 4> +LogSoftmaxTest4( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +template LayerTestResult, 4> +LogSoftmaxTest1( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +template LayerTestResult, 4> +LogSoftmaxTest2( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +template LayerTestResult, 4> +LogSoftmaxTest3( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +template LayerTestResult, 4> +LogSoftmaxTest4( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); diff --git a/src/backends/backendsCommon/test/layerTests/LogSoftmaxTestImpl.hpp b/src/backends/backendsCommon/test/layerTests/LogSoftmaxTestImpl.hpp new file mode 100644 index 0000000000..18a14ccd11 --- /dev/null +++ b/src/backends/backendsCommon/test/layerTests/LogSoftmaxTestImpl.hpp @@ -0,0 +1,33 @@ +// +// Copyright © 2019 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include "LayerTestResult.hpp" + +#include + +#include +#include + +template> +LayerTestResult LogSoftmaxTest1( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +template> +LayerTestResult LogSoftmaxTest2( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +template> +LayerTestResult LogSoftmaxTest3( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +template> +LayerTestResult LogSoftmaxTest4( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -- cgit v1.2.1