aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjimfly01 <jim.flynn@arm.com>2018-11-12 13:32:08 +0000
committerMatteo Martincigh <matteo.martincigh@arm.com>2018-11-14 11:36:44 +0000
commit3aab7c301bcbc206169c12ac04162b1445b4d472 (patch)
treea45fd9f684ba645acef5dd2722a3df8aea3f92fc
parent56055193e82471a70b82e4eb11a8884c5904af75 (diff)
downloadarmnn-3aab7c301bcbc206169c12ac04162b1445b4d472.tar.gz
IVGCVSW-2017: Refactored L2Normalisation Tests
* L2Normalisation Tests now take the layout as an argument. Change-Id: Ib393889eedb3a81c9a500da91593e90a18549c33
-rwxr-xr-xsrc/backends/backendsCommon/test/LayerTests.cpp375
-rw-r--r--src/backends/backendsCommon/test/LayerTests.hpp17
-rwxr-xr-xsrc/backends/cl/test/ClLayerTests.cpp18
-rw-r--r--src/backends/neon/test/NeonLayerTests.cpp18
-rw-r--r--src/backends/reference/test/RefLayerTests.cpp17
5 files changed, 111 insertions, 334 deletions
diff --git a/src/backends/backendsCommon/test/LayerTests.cpp b/src/backends/backendsCommon/test/LayerTests.cpp
index 85b3e1b2b7..2556a3e1f5 100755
--- a/src/backends/backendsCommon/test/LayerTests.cpp
+++ b/src/backends/backendsCommon/test/LayerTests.cpp
@@ -66,6 +66,24 @@ static std::vector<float> ConvInput3x8x16({
// 2-channel bias used by a number of Conv2d tests.
static std::vector<float> Bias2({0, 2});
+armnn::TensorShape GetTestTensorShape(unsigned int numberOfBatches,
+ unsigned int numberOfChannels,
+ unsigned int height,
+ unsigned int width,
+ const armnn::DataLayoutIndexed& dataLayout)
+{
+ switch (dataLayout.GetDataLayout())
+ {
+ case armnn::DataLayout::NCHW:
+ return armnn::TensorShape({numberOfBatches, numberOfChannels, height, width});
+ case armnn::DataLayout::NHWC:
+ return armnn::TensorShape({numberOfBatches, height, width, numberOfChannels});
+ default:
+ throw armnn::InvalidArgumentException("unknown data layout ["
+ + std::to_string(static_cast<int>(dataLayout.GetDataLayout())) + "]");
+ }
+}
+
// Helper function that returns either Bias2 or an empty vector depending on whether bias is enabled.
template<typename T>
boost::multi_array<T, 1> GetBias2(bool biasEnabled, float qScale, int32_t qOffset)
@@ -3396,21 +3414,38 @@ LayerTestResult<float, 4> L2NormalizationTestImpl(armnn::IWorkloadFactory& workl
const armnn::TensorShape& inputOutputTensorShape,
const std::vector<float>& inputValues,
const std::vector<float>& expectedOutputValues,
- armnn::DataLayout dataLayout)
+ const armnn::DataLayoutIndexed& layout)
{
const armnn::TensorInfo inputTensorInfo(inputOutputTensorShape, armnn::DataType::Float32);
const armnn::TensorInfo outputTensorInfo(inputOutputTensorShape, armnn::DataType::Float32);
- auto inputTensor = MakeTensor<float, 4>(inputTensorInfo, std::vector<float>(inputValues));
+ // at this point if we require it permute the input data
+ const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
+ std::vector<float> inputData = inputValues;
+ if (layout.GetDataLayout() == armnn::DataLayout::NHWC)
+ {
+ std::vector<float> tmp(inputData.size());
+ armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data());
+ inputData = tmp;
+ }
+
+ auto inputTensor = MakeTensor<float, 4>(inputTensorInfo, std::vector<float>(inputData));
LayerTestResult<float, 4> result(outputTensorInfo);
- result.outputExpected = MakeTensor<float, 4>(inputTensorInfo, std::vector<float>(expectedOutputValues));
+ std::vector<float> expectedOutputData = expectedOutputValues;
+ if (layout.GetDataLayout() == armnn::DataLayout::NHWC)
+ {
+ std::vector<float> tmp(expectedOutputData.size());
+ armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, expectedOutputData.data(), tmp.data());
+ expectedOutputData = tmp;
+ }
+ result.outputExpected = MakeTensor<float, 4>(inputTensorInfo, std::vector<float>(expectedOutputData));
std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
armnn::L2NormalizationQueueDescriptor descriptor;
- descriptor.m_Parameters.m_DataLayout = dataLayout;
+ descriptor.m_Parameters.m_DataLayout = layout.GetDataLayout();
armnn::WorkloadInfo info;
AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
@@ -3848,14 +3883,21 @@ LayerTestResult<float, 4> PadFloat324dTest(armnn::IWorkloadFactory& workloadFact
return Pad4dTestCommon<float>(workloadFactory, 0.0f, 0);
}
-LayerTestResult<float, 4> L2Normalization1dTest(armnn::IWorkloadFactory& workloadFactory)
+LayerTestResult<float, 4> L2Normalization1dTest(armnn::IWorkloadFactory& workloadFactory,
+ const armnn::DataLayoutIndexed& layout)
{
// Width: 1
// Height: 1
// Channels: 10
// BatchSize: 1
+ unsigned int numberOfBatches = 1;
+ unsigned int numberOfChannels = 10;
+ unsigned int height = 1;
+ unsigned int width = 1;
+
- const armnn::TensorShape inputOutputShape{ 1, 10, 1, 1 };
+ const armnn::TensorShape inputOutputShape = GetTestTensorShape(
+ numberOfBatches, numberOfChannels, height, width, layout);
std::vector<float> inputValues
{
// Batch 0, Channel 0, Height (1) x Width (1)
@@ -3905,50 +3947,23 @@ LayerTestResult<float, 4> L2Normalization1dTest(armnn::IWorkloadFactory& workloa
};
return L2NormalizationTestImpl(workloadFactory, inputOutputShape,
- inputValues, expectedOutputValues, armnn::DataLayout::NCHW);
-}
-
-LayerTestResult<float, 4> L2Normalization1dNhwcTest(armnn::IWorkloadFactory& workloadFactory)
-{
- // Width: 1
- // Height: 1
- // Channels: 10
- // BatchSize: 1
-
- const armnn::TensorShape inputOutputShape{ 1, 1, 1, 10 };
- std::vector<float> inputValues
- {
- // Batch 0, Height 0, Width (1) x Channel (10)
- 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f
- };
- const float approxInvL2Norm = 0.050964719f;
- std::vector<float> expectedOutputValues
- {
- // Batch 0, Height 0, Width (1) x Channel (10)
- 1.0f * approxInvL2Norm,
- 2.0f * approxInvL2Norm,
- 3.0f * approxInvL2Norm,
- 4.0f * approxInvL2Norm,
- 5.0f * approxInvL2Norm,
- 6.0f * approxInvL2Norm,
- 7.0f * approxInvL2Norm,
- 8.0f * approxInvL2Norm,
- 9.0f * approxInvL2Norm,
- 10.0f * approxInvL2Norm
- };
-
- return L2NormalizationTestImpl(workloadFactory, inputOutputShape,
- inputValues, expectedOutputValues, armnn::DataLayout::NHWC);
+ inputValues, expectedOutputValues, layout);
}
-LayerTestResult<float, 4> L2Normalization2dTest(armnn::IWorkloadFactory& workloadFactory)
+LayerTestResult<float, 4> L2Normalization2dTest(armnn::IWorkloadFactory& workloadFactory,
+ const armnn::DataLayoutIndexed& layout)
{
// Width: 5
// Height: 1
// Channels: 2
// BatchSize: 1
+ unsigned int numberOfBatches = 1;
+ unsigned int numberOfChannels = 2;
+ unsigned int height = 1;
+ unsigned int width = 5;
- const armnn::TensorShape inputOutputShape{ 1, 2, 1, 5 };
+ const armnn::TensorShape inputOutputShape = GetTestTensorShape(
+ numberOfBatches, numberOfChannels, height, width, layout);
std::vector<float> inputValues
{
// Batch 0, Channel 0, Height (1) x Width (5)
@@ -3975,53 +3990,23 @@ LayerTestResult<float, 4> L2Normalization2dTest(armnn::IWorkloadFactory& workloa
};
return L2NormalizationTestImpl(workloadFactory, inputOutputShape,
- inputValues, expectedOutputValues, armnn::DataLayout::NCHW);
-}
-
-LayerTestResult<float, 4> L2Normalization2dNhwcTest(armnn::IWorkloadFactory& workloadFactory)
-{
- // Width: 5
- // Height: 1
- // Channels: 2
- // BatchSize: 1
-
- const armnn::TensorShape inputOutputShape{ 1, 1, 5, 2 };
- std::vector<float> inputValues
- {
- // Batch 0, Height 0, Width (5) x Channel (2)
- 1.0f, 2.0f,
- 3.0f, 4.0f,
- 5.0f, 6.0f,
- 7.0f, 8.0f,
- 9.0f, 10.0f
- };
- std::vector<float> expectedOutputValues
- {
- // Batch 0, Height 0, Width (5) x Channel (2)
- 1.0f * CalcInvL2Norm({ 1.0f, 2.0f }),
- 2.0f * CalcInvL2Norm({ 1.0f, 2.0f }),
- 3.0f * CalcInvL2Norm({ 3.0f, 4.0f }),
- 4.0f * CalcInvL2Norm({ 3.0f, 4.0f }),
- 5.0f * CalcInvL2Norm({ 5.0f, 6.0f }),
- 6.0f * CalcInvL2Norm({ 5.0f, 6.0f }),
- 7.0f * CalcInvL2Norm({ 7.0f, 8.0f }),
- 8.0f * CalcInvL2Norm({ 7.0f, 8.0f }),
- 9.0f * CalcInvL2Norm({ 9.0f, 10.0f }),
- 10.0f * CalcInvL2Norm({ 9.0f, 10.0f })
- };
-
- return L2NormalizationTestImpl(workloadFactory, inputOutputShape,
- inputValues, expectedOutputValues, armnn::DataLayout::NHWC);
+ inputValues, expectedOutputValues, layout);
}
-LayerTestResult<float, 4> L2Normalization3dTest(armnn::IWorkloadFactory& workloadFactory)
+LayerTestResult<float, 4> L2Normalization3dTest(armnn::IWorkloadFactory& workloadFactory,
+ const armnn::DataLayoutIndexed& layout)
{
// Width: 3
// Height: 4
// Channels: 2
// BatchSize: 1
+ unsigned int numberOfBatches = 1;
+ unsigned int numberOfChannels = 2;
+ unsigned int height = 4;
+ unsigned int width = 3;
- const armnn::TensorShape inputOutputShape{ 1, 2, 4, 3 };
+ const armnn::TensorShape inputOutputShape = GetTestTensorShape(
+ numberOfBatches, numberOfChannels, height, width, layout);
std::vector<float> inputValues
{
// Batch 0, Channel 0, Height (4) x Width (3)
@@ -4068,86 +4053,23 @@ LayerTestResult<float, 4> L2Normalization3dTest(armnn::IWorkloadFactory& workloa
};
return L2NormalizationTestImpl(workloadFactory, inputOutputShape,
- inputValues, expectedOutputValues, armnn::DataLayout::NCHW);
+ inputValues, expectedOutputValues, layout);
}
-LayerTestResult<float, 4> L2Normalization3dNhwcTest(armnn::IWorkloadFactory& workloadFactory)
-{
- // Width: 3
- // Height: 4
- // Channels: 2
- // BatchSize: 1
-
- const armnn::TensorShape inputOutputShape{ 1, 4, 3, 2 };
- std::vector<float> inputValues
- {
- // Batch 0, Height 0, Width (3) x Channel (2)
- 119.0f, 110.0f,
- 21.0f, 140.0f,
- 150.0f, 73.0f,
-
- // Batch 0, Height 1, Width (3) x Channel (2)
- 149.0f, 211.0f,
- 32.0f, 212.0f,
- 179.0f, 89.0f,
-
- // Batch 0, Height 2, Width (3) x Channel (2)
- 15.0f, 24.0f,
- 227.0f, 138.0f,
- 141.0f, 188.0f,
-
- // Batch 0, Height 3, Width (3) x Channel (2)
- 147.0f, 162.0f,
- 199.0f, 12.0f,
- 220.0f, 161.0f
- };
- std::vector<float> expectedOutputValues
- {
- // Batch 0, Height 0, Width (3) x Channel (2)
- 119.0f * CalcInvL2Norm({ 119.0f, 110.0f }),
- 110.0f * CalcInvL2Norm({ 119.0f, 110.0f }),
- 21.0f * CalcInvL2Norm({ 21.0f, 140.0f }),
- 140.0f * CalcInvL2Norm({ 21.0f, 140.0f }),
- 150.0f * CalcInvL2Norm({ 150.0f, 73.0f }),
- 73.0f * CalcInvL2Norm({ 150.0f, 73.0f }),
-
- // Batch 0, Height 1, Width (3) x Channel (2)
- 149.0f * CalcInvL2Norm({ 149.0f, 211.0f }),
- 211.0f * CalcInvL2Norm({ 149.0f, 211.0f }),
- 32.0f * CalcInvL2Norm({ 32.0f, 212.0f }),
- 212.0f * CalcInvL2Norm({ 32.0f, 212.0f }),
- 179.0f * CalcInvL2Norm({ 179.0f, 89.0f }),
- 89.0f * CalcInvL2Norm({ 179.0f, 89.0f }),
-
- // Batch 0, Height 2, Width (3) x Channel (2)
- 15.0f * CalcInvL2Norm({ 15.0f, 24.0f }),
- 24.0f * CalcInvL2Norm({ 15.0f, 24.0f }),
- 227.0f * CalcInvL2Norm({ 227.0f, 138.0f }),
- 138.0f * CalcInvL2Norm({ 227.0f, 138.0f }),
- 141.0f * CalcInvL2Norm({ 141.0f, 188.0f }),
- 188.0f * CalcInvL2Norm({ 141.0f, 188.0f }),
-
- // Batch 0, Height 3, Width (3) x Channel (2)
- 147.0f * CalcInvL2Norm({ 147.0f, 162.0f }),
- 162.0f * CalcInvL2Norm({ 147.0f, 162.0f }),
- 199.0f * CalcInvL2Norm({ 199.0f, 12.0f }),
- 12.0f * CalcInvL2Norm({ 199.0f, 12.0f }),
- 220.0f * CalcInvL2Norm({ 220.0f, 161.0f }),
- 161.0f * CalcInvL2Norm({ 220.0f, 161.0f })
- };
-
- return L2NormalizationTestImpl(workloadFactory, inputOutputShape,
- inputValues, expectedOutputValues, armnn::DataLayout::NHWC);
-}
-
-LayerTestResult<float, 4> L2Normalization4dTest(armnn::IWorkloadFactory& workloadFactory)
+LayerTestResult<float, 4> L2Normalization4dTest(armnn::IWorkloadFactory& workloadFactory,
+ const armnn::DataLayoutIndexed& layout)
{
// Width: 3
// Height: 4
// Channels: 3
// BatchSize: 2
+ unsigned int numberOfBatches = 2;
+ unsigned int numberOfChannels = 3;
+ unsigned int height = 4;
+ unsigned int width = 3;
- const armnn::TensorShape inputOutputShape{ 2, 3, 4, 3 };
+ const armnn::TensorShape inputOutputShape = GetTestTensorShape(
+ numberOfBatches, numberOfChannels, height, width, layout);
std::vector<float> inputValues
{
// Batch 0, Channel 0, Height (4) x Width (3)
@@ -4274,152 +4196,7 @@ LayerTestResult<float, 4> L2Normalization4dTest(armnn::IWorkloadFactory& workloa
};
return L2NormalizationTestImpl(workloadFactory, inputOutputShape,
- inputValues, expectedOutputValues, armnn::DataLayout::NCHW);
-}
-
-LayerTestResult<float, 4> L2Normalization4dNhwcTest(armnn::IWorkloadFactory& workloadFactory)
-{
- // Width: 3
- // Height: 4
- // Channels: 3
- // BatchSize: 2
-
- const armnn::TensorShape inputOutputShape{ 2, 4, 3, 3 };
- std::vector<float> inputValues
- {
- // Batch 0, Height 0, Width (3) x Channel (3)
- 235.0f, 113.0f, 56.0f,
- 46.0f, 95.0f, 170.0f,
- 178.0f, 202.0f, 162.0f,
-
- // Batch 0, Height 1, Width (3) x Channel (3)
- 100.0f, 77.0f, 194.0f,
- 123.0f, 114.0f, 89.0f,
- 19.0f, 71.0f, 254.0f,
-
- // Batch 0, Height 2, Width (3) x Channel (3)
- 172.0f, 122.0f, 12.0f,
- 74.0f, 246.0f, 209.0f,
- 250.0f, 166.0f, 200.0f,
-
- // Batch 0, Height 3, Width (3) x Channel (3)
- 6.0f, 82.0f, 1.0f,
- 195.0f, 28.0f, 64.0f,
- 80.0f, 37.0f, 54.0f,
-
- // Batch 1, Height 0, Width (3) x Channel (3)
- 67.0f, 239.0f, 97.0f,
- 90.0f, 104.0f, 145.0f,
- 49.0f, 199.0f, 215.0f,
-
- // Batch 1, Height 1, Width (3) x Channel (3)
- 7.0f, 17.0f, 115.0f,
- 163.0f, 124.0f, 116.0f,
- 18.0f, 153.0f, 238.0f,
-
- // Batch 1, Height 2, Width (3) x Channel (3)
- 25.0f, 222.0f, 226.0f,
- 117.0f, 217.0f, 16.0f,
- 103.0f, 75.0f, 132.0f,
-
- // Batch 1, Height 3, Width (3) x Channel (3)
- 247.0f, 32.0f, 92.0f,
- 59.0f, 126.0f, 125.0f,
- 189.0f, 21.0f, 88.0f
- };
- std::vector<float> expectedOutputValues
- {
- // Batch 0, Height 0, Width (3) x Channel (3)
- 235.0f * CalcInvL2Norm({ 235.0f, 113.0f, 56.0f }),
- 113.0f * CalcInvL2Norm({ 235.0f, 113.0f, 56.0f }),
- 56.0f * CalcInvL2Norm({ 235.0f, 113.0f, 56.0f }),
- 46.0f * CalcInvL2Norm({ 46.0f, 95.0f, 170.0f }),
- 95.0f * CalcInvL2Norm({ 46.0f, 95.0f, 170.0f }),
- 170.0f * CalcInvL2Norm({ 46.0f, 95.0f, 170.0f }),
- 178.0f * CalcInvL2Norm({ 178.0f, 202.0F, 162.0f }),
- 202.0f * CalcInvL2Norm({ 178.0f, 202.0F, 162.0f }),
- 162.0f * CalcInvL2Norm({ 178.0f, 202.0F, 162.0f }),
-
- // Batch 0, Height 1, Width (3) x Channel (3)
- 100.0f * CalcInvL2Norm({ 100.0f, 77.0f, 194.0f }),
- 77.0f * CalcInvL2Norm({ 100.0f, 77.0f, 194.0f }),
- 194.0f * CalcInvL2Norm({ 100.0f, 77.0f, 194.0f }),
- 123.0f * CalcInvL2Norm({ 123.0f, 114.0f, 89.0f }),
- 114.0f * CalcInvL2Norm({ 123.0f, 114.0f, 89.0f }),
- 89.0f * CalcInvL2Norm({ 123.0f, 114.0f, 89.0f }),
- 19.0f * CalcInvL2Norm({ 19.0f, 71.0f, 254.0f }),
- 71.0f * CalcInvL2Norm({ 19.0f, 71.0f, 254.0f }),
- 254.0f * CalcInvL2Norm({ 19.0f, 71.0f, 254.0f }),
-
- // Batch 0, Height 2, Width (3) x Channel (3)
- 172.0f * CalcInvL2Norm({ 172.0f, 122.0f, 12.0f }),
- 122.0f * CalcInvL2Norm({ 172.0f, 122.0f, 12.0f }),
- 12.0f * CalcInvL2Norm({ 172.0f, 122.0f, 12.0f }),
- 74.0f * CalcInvL2Norm({ 74.0f, 246.0f, 209.0f }),
- 246.0f * CalcInvL2Norm({ 74.0f, 246.0f, 209.0f }),
- 209.0f * CalcInvL2Norm({ 74.0f, 246.0f, 209.0f }),
- 250.0f * CalcInvL2Norm({ 250.0f, 166.0f, 200.0f }),
- 166.0f * CalcInvL2Norm({ 250.0f, 166.0f, 200.0f }),
- 200.0f * CalcInvL2Norm({ 250.0f, 166.0f, 200.0f }),
-
- // Batch 0, Height 3, Width (3) x Channel (3)
- 6.0f * CalcInvL2Norm({ 6.0f, 82.0f, 1.0f }),
- 82.0f * CalcInvL2Norm({ 6.0f, 82.0f, 1.0f }),
- 1.0f * CalcInvL2Norm({ 6.0f, 82.0f, 1.0f }),
- 195.0f * CalcInvL2Norm({ 195.0f, 28.0f, 64.0f }),
- 28.0f * CalcInvL2Norm({ 195.0f, 28.0f, 64.0f }),
- 64.0f * CalcInvL2Norm({ 195.0f, 28.0f, 64.0f }),
- 80.0f * CalcInvL2Norm({ 80.0f, 37.0f, 54.0f }),
- 37.0f * CalcInvL2Norm({ 80.0f, 37.0f, 54.0f }),
- 54.0f * CalcInvL2Norm({ 80.0f, 37.0f, 54.0f }),
-
- // Batch 1, Height 0, Width (3) x Channel (3)
- 67.0f * CalcInvL2Norm({ 67.0f, 239.0f, 97.0f }),
- 239.0f * CalcInvL2Norm({ 67.0f, 239.0f, 97.0f }),
- 97.0f * CalcInvL2Norm({ 67.0f, 239.0f, 97.0f }),
- 90.0f * CalcInvL2Norm({ 90.0f, 104.0f, 145.0f }),
- 104.0f * CalcInvL2Norm({ 90.0f, 104.0f, 145.0f }),
- 145.0f * CalcInvL2Norm({ 90.0f, 104.0f, 145.0f }),
- 49.0f * CalcInvL2Norm({ 49.0f, 199.0f, 215.0f }),
- 199.0f * CalcInvL2Norm({ 49.0f, 199.0f, 215.0f }),
- 215.0f * CalcInvL2Norm({ 49.0f, 199.0f, 215.0f }),
-
- // Batch 1, Height 1, Width (3) x Channel (3)
- 7.0f * CalcInvL2Norm({ 7.0f, 17.0f, 115.0f }),
- 17.0f * CalcInvL2Norm({ 7.0f, 17.0f, 115.0f }),
- 115.0f * CalcInvL2Norm({ 7.0f, 17.0f, 115.0f }),
- 163.0f * CalcInvL2Norm({ 163.0f, 124.0f, 116.0f }),
- 124.0f * CalcInvL2Norm({ 163.0f, 124.0f, 116.0f }),
- 116.0f * CalcInvL2Norm({ 163.0f, 124.0f, 116.0f }),
- 18.0f * CalcInvL2Norm({ 18.0f, 153.0f, 238.0f }),
- 153.0f * CalcInvL2Norm({ 18.0f, 153.0f, 238.0f }),
- 238.0f * CalcInvL2Norm({ 18.0f, 153.0f, 238.0f }),
-
- // Batch 1, Height 2, Width (3) x Channel (3)
- 25.0f * CalcInvL2Norm({ 25.0f, 222.0f, 226.0f }),
- 222.0f * CalcInvL2Norm({ 25.0f, 222.0f, 226.0f }),
- 226.0f * CalcInvL2Norm({ 25.0f, 222.0f, 226.0f }),
- 117.0f * CalcInvL2Norm({ 117.0f, 217.0f, 16.0f }),
- 217.0f * CalcInvL2Norm({ 117.0f, 217.0f, 16.0f }),
- 16.0f * CalcInvL2Norm({ 117.0f, 217.0f, 16.0f }),
- 103.0f * CalcInvL2Norm({ 103.0f, 75.0f, 132.0f }),
- 75.0f * CalcInvL2Norm({ 103.0f, 75.0f, 132.0f }),
- 132.0f * CalcInvL2Norm({ 103.0f, 75.0f, 132.0f }),
-
- // Batch 1, Height 3, Width (3) x Channel (3)
- 247.0f * CalcInvL2Norm({ 247.0f, 32.0f, 92.0f }),
- 32.0f * CalcInvL2Norm({ 247.0f, 32.0f, 92.0f }),
- 92.0f * CalcInvL2Norm({ 247.0f, 32.0f, 92.0f }),
- 59.0f * CalcInvL2Norm({ 59.0f, 126.0f, 125.0f }),
- 126.0f * CalcInvL2Norm({ 59.0f, 126.0f, 125.0f }),
- 125.0f * CalcInvL2Norm({ 59.0f, 126.0f, 125.0f }),
- 189.0f * CalcInvL2Norm({ 189.0f, 21.0f, 88.0f }),
- 21.0f * CalcInvL2Norm({ 189.0f, 21.0f, 88.0f }),
- 88.0f * CalcInvL2Norm({ 189.0f, 21.0f, 88.0f })
- };
-
- return L2NormalizationTestImpl(workloadFactory, inputOutputShape,
- inputValues, expectedOutputValues, armnn::DataLayout::NHWC);
+ inputValues, expectedOutputValues, layout);
}
template <typename T>
diff --git a/src/backends/backendsCommon/test/LayerTests.hpp b/src/backends/backendsCommon/test/LayerTests.hpp
index cd8758e477..34d55832da 100644
--- a/src/backends/backendsCommon/test/LayerTests.hpp
+++ b/src/backends/backendsCommon/test/LayerTests.hpp
@@ -280,15 +280,14 @@ LayerTestResult<float, 4> BatchNormNhwcTest(armnn::IWorkloadFactory& workloadFac
LayerTestResult<float, 2> FakeQuantizationTest(armnn::IWorkloadFactory& workloadFactory);
-LayerTestResult<float, 4> L2Normalization1dTest(armnn::IWorkloadFactory& workloadFactory);
-LayerTestResult<float, 4> L2Normalization2dTest(armnn::IWorkloadFactory& workloadFactory);
-LayerTestResult<float, 4> L2Normalization3dTest(armnn::IWorkloadFactory& workloadFactory);
-LayerTestResult<float, 4> L2Normalization4dTest(armnn::IWorkloadFactory& workloadFactory);
-
-LayerTestResult<float, 4> L2Normalization1dNhwcTest(armnn::IWorkloadFactory& workloadFactory);
-LayerTestResult<float, 4> L2Normalization2dNhwcTest(armnn::IWorkloadFactory& workloadFactory);
-LayerTestResult<float, 4> L2Normalization3dNhwcTest(armnn::IWorkloadFactory& workloadFactory);
-LayerTestResult<float, 4> L2Normalization4dNhwcTest(armnn::IWorkloadFactory& workloadFactory);
+LayerTestResult<float, 4> L2Normalization1dTest(armnn::IWorkloadFactory& workloadFactory,
+ const armnn::DataLayoutIndexed& layout);
+LayerTestResult<float, 4> L2Normalization2dTest(armnn::IWorkloadFactory& workloadFactory,
+ const armnn::DataLayoutIndexed& layout);
+LayerTestResult<float, 4> L2Normalization3dTest(armnn::IWorkloadFactory& workloadFactory,
+ const armnn::DataLayoutIndexed& layout);
+LayerTestResult<float, 4> L2Normalization4dTest(armnn::IWorkloadFactory& workloadFactory,
+ const armnn::DataLayoutIndexed& layout);
LayerTestResult<float, 4> ConstantTest(armnn::IWorkloadFactory& workloadFactory);
diff --git a/src/backends/cl/test/ClLayerTests.cpp b/src/backends/cl/test/ClLayerTests.cpp
index c7d64ef607..2559fb45ae 100755
--- a/src/backends/cl/test/ClLayerTests.cpp
+++ b/src/backends/cl/test/ClLayerTests.cpp
@@ -224,15 +224,15 @@ ARMNN_AUTO_TEST_CASE(BatchNorm, BatchNormTest)
ARMNN_AUTO_TEST_CASE(BatchNormNhwc, BatchNormNhwcTest)
// L2 Normalization
-ARMNN_AUTO_TEST_CASE(L2Normalization1d, L2Normalization1dTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization2d, L2Normalization2dTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization3d, L2Normalization3dTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization4d, L2Normalization4dTest)
-
-ARMNN_AUTO_TEST_CASE(L2Normalization1dNhwc, L2Normalization1dNhwcTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization2dNhwc, L2Normalization2dNhwcTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization3dNhwc, L2Normalization3dNhwcTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization4dNhwc, L2Normalization4dNhwcTest)
+ARMNN_AUTO_TEST_CASE(L2Normalization1d, L2Normalization1dTest, armnn::DataLayout::NCHW)
+ARMNN_AUTO_TEST_CASE(L2Normalization2d, L2Normalization2dTest, armnn::DataLayout::NCHW)
+ARMNN_AUTO_TEST_CASE(L2Normalization3d, L2Normalization3dTest, armnn::DataLayout::NCHW)
+ARMNN_AUTO_TEST_CASE(L2Normalization4d, L2Normalization4dTest, armnn::DataLayout::NCHW)
+
+ARMNN_AUTO_TEST_CASE(L2Normalization1dNhwc, L2Normalization1dTest, armnn::DataLayout::NHWC)
+ARMNN_AUTO_TEST_CASE(L2Normalization2dNhwc, L2Normalization2dTest, armnn::DataLayout::NHWC)
+ARMNN_AUTO_TEST_CASE(L2Normalization3dNhwc, L2Normalization3dTest, armnn::DataLayout::NHWC)
+ARMNN_AUTO_TEST_CASE(L2Normalization4dNhwc, L2Normalization4dTest, armnn::DataLayout::NHWC)
// Resize Bilinear - NCHW data layout
ARMNN_AUTO_TEST_CASE(ResizeBilinearNop, ResizeBilinearNopTest, armnn::DataLayout::NCHW)
diff --git a/src/backends/neon/test/NeonLayerTests.cpp b/src/backends/neon/test/NeonLayerTests.cpp
index 48ef667323..d4bfa17960 100644
--- a/src/backends/neon/test/NeonLayerTests.cpp
+++ b/src/backends/neon/test/NeonLayerTests.cpp
@@ -415,15 +415,15 @@ ARMNN_AUTO_TEST_CASE(Concatenation3dDim2DiffInputDims, Concatenation3dDim2DiffIn
ARMNN_AUTO_TEST_CASE(Concatenation3dDim2DiffInputDimsUint8, Concatenation3dDim2DiffInputDimsUint8Test)
// L2 Normalization
-ARMNN_AUTO_TEST_CASE(L2Normalization1d, L2Normalization1dTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization2d, L2Normalization2dTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization3d, L2Normalization3dTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization4d, L2Normalization4dTest)
-
-ARMNN_AUTO_TEST_CASE(L2Normalization1dNhwc, L2Normalization1dNhwcTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization2dNhwc, L2Normalization2dNhwcTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization3dNhwc, L2Normalization3dNhwcTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization4dNhwc, L2Normalization4dNhwcTest)
+ARMNN_AUTO_TEST_CASE(L2Normalization1d, L2Normalization1dTest, armnn::DataLayout::NCHW)
+ARMNN_AUTO_TEST_CASE(L2Normalization2d, L2Normalization2dTest, armnn::DataLayout::NCHW)
+ARMNN_AUTO_TEST_CASE(L2Normalization3d, L2Normalization3dTest, armnn::DataLayout::NCHW)
+ARMNN_AUTO_TEST_CASE(L2Normalization4d, L2Normalization4dTest, armnn::DataLayout::NCHW)
+
+ARMNN_AUTO_TEST_CASE(L2Normalization1dNhwc, L2Normalization1dTest, armnn::DataLayout::NHWC)
+ARMNN_AUTO_TEST_CASE(L2Normalization2dNhwc, L2Normalization2dTest, armnn::DataLayout::NHWC)
+ARMNN_AUTO_TEST_CASE(L2Normalization3dNhwc, L2Normalization3dTest, armnn::DataLayout::NHWC)
+ARMNN_AUTO_TEST_CASE(L2Normalization4dNhwc, L2Normalization4dTest, armnn::DataLayout::NHWC)
// Floor
ARMNN_AUTO_TEST_CASE(SimpleFloor, SimpleFloorTest)
diff --git a/src/backends/reference/test/RefLayerTests.cpp b/src/backends/reference/test/RefLayerTests.cpp
index 95ddbadbcc..8bbf11bfad 100644
--- a/src/backends/reference/test/RefLayerTests.cpp
+++ b/src/backends/reference/test/RefLayerTests.cpp
@@ -270,10 +270,15 @@ ARMNN_AUTO_TEST_CASE(ResizeBilinearMagNhwc, ResizeBilinearMagTest, armnn::DataLa
ARMNN_AUTO_TEST_CASE(FakeQuantization, FakeQuantizationTest)
// L2 Normalization
-ARMNN_AUTO_TEST_CASE(L2Normalization1d, L2Normalization1dTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization2d, L2Normalization2dTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization3d, L2Normalization3dTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization4d, L2Normalization4dTest)
+ARMNN_AUTO_TEST_CASE(L2Normalization1d, L2Normalization1dTest, armnn::DataLayout::NCHW)
+ARMNN_AUTO_TEST_CASE(L2Normalization2d, L2Normalization2dTest, armnn::DataLayout::NCHW)
+ARMNN_AUTO_TEST_CASE(L2Normalization3d, L2Normalization3dTest, armnn::DataLayout::NCHW)
+ARMNN_AUTO_TEST_CASE(L2Normalization4d, L2Normalization4dTest, armnn::DataLayout::NCHW)
+
+ARMNN_AUTO_TEST_CASE(L2Normalization1dNhwc, L2Normalization1dTest, armnn::DataLayout::NHWC)
+ARMNN_AUTO_TEST_CASE(L2Normalization2dNhwc, L2Normalization2dTest, armnn::DataLayout::NHWC)
+ARMNN_AUTO_TEST_CASE(L2Normalization3dNhwc, L2Normalization3dTest, armnn::DataLayout::NHWC)
+ARMNN_AUTO_TEST_CASE(L2Normalization4dNhwc, L2Normalization4dTest, armnn::DataLayout::NHWC)
// Pad
ARMNN_AUTO_TEST_CASE(PadFloat322d, PadFloat322dTest)
@@ -284,10 +289,6 @@ ARMNN_AUTO_TEST_CASE(PadUint82d, PadUint82dTest)
ARMNN_AUTO_TEST_CASE(PadUint83d, PadUint83dTest)
ARMNN_AUTO_TEST_CASE(PadUint84d, PadUint84dTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization1dNhwc, L2Normalization1dNhwcTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization2dNhwc, L2Normalization2dNhwcTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization3dNhwc, L2Normalization3dNhwcTest)
-ARMNN_AUTO_TEST_CASE(L2Normalization4dNhwc, L2Normalization4dNhwcTest)
// Constant
ARMNN_AUTO_TEST_CASE(Constant, ConstantTest)