From 5f94124ac11afbbf2d2a4cda539b316964802c76 Mon Sep 17 00:00:00 2001 From: Narumol Prangnawarat Date: Fri, 11 Aug 2023 16:09:26 +0100 Subject: 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 Change-Id: I510fae55528be412a58d020e82bd283852e7800b --- .../UnidirectionalSequenceLstmTestImpl.cpp | 36 +++++++++++++++++++--- .../UnidirectionalSequenceLstmTestImpl.hpp | 7 ++++- 2 files changed, 37 insertions(+), 6 deletions(-) (limited to 'src/backends/backendsCommon') 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 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(inputShape[0]); unsigned int timeSize = armnn::numeric_cast(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(inputShape[1]); unsigned int timeSize = armnn::numeric_cast(inputShape[0]); @@ -613,7 +615,8 @@ LayerTestResult UnidirectionalSequenceLstmLayerFloat32TimeMajorSingleB LayerTestResult 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 input = { 1., 2., 3., 4., 5., 4., 3., 2., 1. }; @@ -626,10 +629,32 @@ LayerTestResult UnidirectionalSequenceLstmLayerFloat32BatchMajorSingle input, expectedOutput, inputInfo.GetShape(), outputInfo.GetShape()); } +LayerTestResult UnidirectionalSequenceLstmLayerFloat32TimeMajorSingleTimeTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::ITensorHandleFactory& tensorHandleFactory) +{ + armnn::TensorInfo inputInfo({ 1, 3, 3 }, armnn::DataType::Float32); + std::vector input = { 1., 2., 3., + 4., 5., 6., + 7., 8., 9. }; + + armnn::TensorInfo outputInfo({ 1, 3, 4 }, armnn::DataType::Float32); + std::vector 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( + workloadFactory, memoryManager, tensorHandleFactory, + input, expectedOutput, inputInfo.GetShape(), outputInfo.GetShape()); +} + LayerTestResult 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 input = { 1., 2., 3., 4., 5., 4., 3., 2., 1., 2., 3., 4., @@ -650,7 +675,8 @@ LayerTestResult UnidirectionalSequenceLstmLayerFloat32Test( LayerTestResult 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 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 UnidirectionalSequenceLstmLayerFloat32BatchMajorSingle const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); +LayerTestResult UnidirectionalSequenceLstmLayerFloat32TimeMajorSingleTimeTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::ITensorHandleFactory& tensorHandleFactory); + LayerTestResult UnidirectionalSequenceLstmLayerFloat32Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, -- cgit v1.2.1