aboutsummaryrefslogtreecommitdiff
path: root/src/backends/backendsCommon
diff options
context:
space:
mode:
authorNarumol Prangnawarat <narumol.prangnawarat@arm.com>2023-08-11 16:09:26 +0100
committerNarumol Prangnawarat <narumol.prangnawarat@arm.com>2023-08-21 13:34:54 +0100
commit5f94124ac11afbbf2d2a4cda539b316964802c76 (patch)
tree38d6f31517fe322cb0065a8c3e947801791a6405 /src/backends/backendsCommon
parentc4f42340bd3d6664098c69d2fb044089aa39aea0 (diff)
downloadarmnn-5f94124ac11afbbf2d2a4cda539b316964802c76.tar.gz
IVGCVSW-7964 Fix UnidirectionalSequenceLstm
* Fix incorrect batch size and time size * Fix incorrect time major when max time =1 * Fix incorrect permutation * Fix incorrect scratch buffer * Unit tests Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com> Change-Id: I510fae55528be412a58d020e82bd283852e7800b
Diffstat (limited to 'src/backends/backendsCommon')
-rw-r--r--src/backends/backendsCommon/test/layerTests/UnidirectionalSequenceLstmTestImpl.cpp36
-rw-r--r--src/backends/backendsCommon/test/layerTests/UnidirectionalSequenceLstmTestImpl.hpp7
2 files changed, 37 insertions, 6 deletions
diff --git a/src/backends/backendsCommon/test/layerTests/UnidirectionalSequenceLstmTestImpl.cpp b/src/backends/backendsCommon/test/layerTests/UnidirectionalSequenceLstmTestImpl.cpp
index 4a63d39800..5381df5276 100644
--- a/src/backends/backendsCommon/test/layerTests/UnidirectionalSequenceLstmTestImpl.cpp
+++ b/src/backends/backendsCommon/test/layerTests/UnidirectionalSequenceLstmTestImpl.cpp
@@ -224,7 +224,8 @@ LayerTestResult<T, 3> UnidirectionalSequenceLstmLayerFloat32TestImpl(
const armnn::TensorShape& outputExpectedShape,
float qScale = 1.0f,
int32_t qOffset = 0,
- armnn::DataType constantDataType = armnn::DataType::Float32) {
+ armnn::DataType constantDataType = armnn::DataType::Float32)
+{
IgnoreUnused(memoryManager);
unsigned int batchSize = armnn::numeric_cast<unsigned int>(inputShape[0]);
unsigned int timeSize = armnn::numeric_cast<unsigned int>(inputShape[1]);
@@ -413,7 +414,8 @@ UnidirectionalSequenceLstmLayerFloat32TimeMajorTestImpl(
const armnn::TensorShape& outputExpectedShape,
float qScale = 1.0f,
int32_t qOffset = 0,
- armnn::DataType constantDataType = armnn::DataType::Float32) {
+ armnn::DataType constantDataType = armnn::DataType::Float32)
+{
IgnoreUnused(memoryManager);
unsigned int batchSize = armnn::numeric_cast<unsigned int>(inputShape[1]);
unsigned int timeSize = armnn::numeric_cast<unsigned int>(inputShape[0]);
@@ -613,7 +615,8 @@ LayerTestResult<float, 3> UnidirectionalSequenceLstmLayerFloat32TimeMajorSingleB
LayerTestResult<float, 3> UnidirectionalSequenceLstmLayerFloat32BatchMajorSingleBatchTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::ITensorHandleFactory& tensorHandleFactory) {
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
armnn::TensorInfo inputInfo({3, 1, 3}, armnn::DataType::Float32);
std::vector<float> input = { 1., 2., 3., 4., 5., 4., 3., 2., 1. };
@@ -626,10 +629,32 @@ LayerTestResult<float, 3> UnidirectionalSequenceLstmLayerFloat32BatchMajorSingle
input, expectedOutput, inputInfo.GetShape(), outputInfo.GetShape());
}
+LayerTestResult<float, 3> UnidirectionalSequenceLstmLayerFloat32TimeMajorSingleTimeTest(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ armnn::TensorInfo inputInfo({ 1, 3, 3 }, armnn::DataType::Float32);
+ std::vector<float> input = { 1., 2., 3.,
+ 4., 5., 6.,
+ 7., 8., 9. };
+
+ armnn::TensorInfo outputInfo({ 1, 3, 4 }, armnn::DataType::Float32);
+ std::vector<float> expectedOutput =
+ { 0.13565768f, 0.12467254f, 0.02120903f, -0.05302038f,
+ 0.1053334f, 0.08508634f, 0.00667238f, -0.00356043f,
+ 0.05638668f, 0.02924093f, 0.00119751f, -0.00017249f };
+
+ return UnidirectionalSequenceLstmLayerFloat32TimeMajorTestImpl<armnn::DataType::Float32>(
+ workloadFactory, memoryManager, tensorHandleFactory,
+ input, expectedOutput, inputInfo.GetShape(), outputInfo.GetShape());
+}
+
LayerTestResult<float, 3> UnidirectionalSequenceLstmLayerFloat32Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::ITensorHandleFactory& tensorHandleFactory) {
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
armnn::TensorInfo inputInfo({3, 2, 3}, armnn::DataType::Float32);
std::vector<float> input = { 1., 2., 3., 4., 5., 4.,
3., 2., 1., 2., 3., 4.,
@@ -650,7 +675,8 @@ LayerTestResult<float, 3> UnidirectionalSequenceLstmLayerFloat32Test(
LayerTestResult<float, 3> UnidirectionalSequenceLstmLayerFloat32TimeMajorTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::ITensorHandleFactory& tensorHandleFactory) {
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
armnn::TensorInfo inputInfo({2, 3, 3}, armnn::DataType::Float32);
std::vector<float> input = { 1., 2., 3., 4., 5., 4.,
3., 2., 1., 2., 3., 4.,
diff --git a/src/backends/backendsCommon/test/layerTests/UnidirectionalSequenceLstmTestImpl.hpp b/src/backends/backendsCommon/test/layerTests/UnidirectionalSequenceLstmTestImpl.hpp
index f303b28c10..5e64dcd0ed 100644
--- a/src/backends/backendsCommon/test/layerTests/UnidirectionalSequenceLstmTestImpl.hpp
+++ b/src/backends/backendsCommon/test/layerTests/UnidirectionalSequenceLstmTestImpl.hpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2021, 2023 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
@@ -20,6 +20,11 @@ LayerTestResult<float, 3> UnidirectionalSequenceLstmLayerFloat32BatchMajorSingle
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
const armnn::ITensorHandleFactory& tensorHandleFactory);
+LayerTestResult<float, 3> UnidirectionalSequenceLstmLayerFloat32TimeMajorSingleTimeTest(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
LayerTestResult<float, 3> UnidirectionalSequenceLstmLayerFloat32Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,