aboutsummaryrefslogtreecommitdiff
path: root/src/backends/backendsCommon/test/layerTests/BatchNormalizationTestImpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends/backendsCommon/test/layerTests/BatchNormalizationTestImpl.cpp')
-rw-r--r--src/backends/backendsCommon/test/layerTests/BatchNormalizationTestImpl.cpp90
1 files changed, 49 insertions, 41 deletions
diff --git a/src/backends/backendsCommon/test/layerTests/BatchNormalizationTestImpl.cpp b/src/backends/backendsCommon/test/layerTests/BatchNormalizationTestImpl.cpp
index 969d5dbcd1..4311faff4e 100644
--- a/src/backends/backendsCommon/test/layerTests/BatchNormalizationTestImpl.cpp
+++ b/src/backends/backendsCommon/test/layerTests/BatchNormalizationTestImpl.cpp
@@ -58,18 +58,16 @@ LayerTestResult<T, 4> BatchNormTestImpl(
tensorInfo.SetQuantizationOffset(qOffset);
}
- auto inputTensor = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputValues, qScale, qOffset));
+ auto inputTensor = QuantizedVector<T>(inputValues, qScale, qOffset);
// These values are per-channel of the input.
- auto mean = MakeTensor<T, 1>(tensorInfo, QuantizedVector<T>({ 3, -2 }, qScale, qOffset));
- auto variance = MakeTensor<T, 1>(tensorInfo, QuantizedVector<T>({ 4, 9 }, qScale, qOffset));
- auto beta = MakeTensor<T, 1>(tensorInfo, QuantizedVector<T>({ 3, 2 }, qScale, qOffset));
- auto gamma = MakeTensor<T, 1>(tensorInfo, QuantizedVector<T>({ 2, 1 }, qScale, qOffset));
+ auto mean = QuantizedVector<T>({ 3, -2 }, qScale, qOffset);
+ auto variance = QuantizedVector<T>({ 4, 9 }, qScale, qOffset);
+ auto beta = QuantizedVector<T>({ 3, 2 }, qScale, qOffset);
+ auto gamma = QuantizedVector<T>({ 2, 1 }, qScale, qOffset);
- LayerTestResult<T, 4> result(outputTensorInfo);
-
- result.outputExpected = MakeTensor<T, 4>(inputTensorInfo,
- QuantizedVector<T>(expectedOutputValues, qScale, qOffset));
+ std::vector<T> actualOutput(outputTensorInfo.GetNumElements());
+ std::vector<T> expectedOutput = QuantizedVector<T>(expectedOutputValues, qScale, qOffset);
std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo);
std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo);
@@ -88,10 +86,10 @@ LayerTestResult<T, 4> BatchNormTestImpl(
descriptor.m_Parameters.m_DataLayout = dataLayout;
armnn::WorkloadInfo info;
- AllocateAndCopyDataToITensorHandle(&meanTensor, &mean[0]);
- AllocateAndCopyDataToITensorHandle(&varianceTensor, &variance[0]);
- AllocateAndCopyDataToITensorHandle(&betaTensor, &beta[0]);
- AllocateAndCopyDataToITensorHandle(&gammaTensor, &gamma[0]);
+ AllocateAndCopyDataToITensorHandle(&meanTensor, mean.data());
+ AllocateAndCopyDataToITensorHandle(&varianceTensor, variance.data());
+ AllocateAndCopyDataToITensorHandle(&betaTensor, beta.data());
+ AllocateAndCopyDataToITensorHandle(&gammaTensor, gamma.data());
AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
@@ -101,13 +99,16 @@ LayerTestResult<T, 4> BatchNormTestImpl(
inputHandle->Allocate();
outputHandle->Allocate();
- CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]);
+ CopyDataToITensorHandle(inputHandle.get(), inputTensor.data());
workload->Execute();
- CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
+ CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get());
- return result;
+ return LayerTestResult<T, 4>(actualOutput,
+ expectedOutput,
+ outputHandle->GetShape(),
+ outputTensorInfo.GetShape());
}
template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
@@ -140,20 +141,19 @@ LayerTestResult<T,4> BatchNormTestNhwcImpl(
tensorInfo.SetQuantizationOffset(qOffset);
}
- auto input = MakeTensor<T, 4>(inputTensorInfo,
- QuantizedVector<T>(
+ auto input = QuantizedVector<T>(
{
1.f, 1.f, 4.f, 1.f,
4.f, 4.f, 2.f, 1.f,
1.f, -2.f, 6.f, 4.f
},
- qScale, qOffset));
+ qScale, qOffset);
+
// These values are per-channel of the input.
- auto mean = MakeTensor<T, 1>(tensorInfo, QuantizedVector<T>({ 3, -2 }, qScale, qOffset));
- auto variance = MakeTensor<T, 1>(tensorInfo, QuantizedVector<T>({ 4, 9 }, qScale, qOffset));
- auto beta = MakeTensor<T, 1>(tensorInfo, QuantizedVector<T>({ 3, 2 }, qScale, qOffset));
- auto gamma = MakeTensor<T, 1>(tensorInfo, QuantizedVector<T>({ 2, 1 }, qScale, qOffset));
- LayerTestResult<T,4> ret(outputTensorInfo);
+ auto mean = QuantizedVector<T>({ 3, -2 }, qScale, qOffset);
+ auto variance = QuantizedVector<T>({ 4, 9 }, qScale, qOffset);
+ auto beta = QuantizedVector<T>({ 3, 2 }, qScale, qOffset);
+ auto gamma = QuantizedVector<T>({ 2, 1 }, qScale, qOffset);
std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo);
std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo);
@@ -179,30 +179,34 @@ LayerTestResult<T,4> BatchNormTestNhwcImpl(
data.m_Parameters.m_Eps = 0.0f;
data.m_Parameters.m_DataLayout = armnn::DataLayout::NHWC;
+ std::vector<T> actualOutput(outputTensorInfo.GetNumElements());
+
// For each channel:
// substract mean, divide by standard deviation (with an epsilon to avoid div by 0),
// multiply by gamma and add beta
- ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
- QuantizedVector<T>(
+ std::vector<T> expectedOutput = QuantizedVector<T>(
{
1.f, 3.f, 4.f, 3.f,
4.f, 4.f, 2.f, 3.f,
1.f, 2.f, 6.f, 4.f
},
- qScale, qOffset));
+ qScale, qOffset);
std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateBatchNormalization(data, info);
inputHandle->Allocate();
outputHandle->Allocate();
- CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
+ CopyDataToITensorHandle(inputHandle.get(), input.data());
workload->Execute();
- CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
+ CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get());
- return ret;
+ return LayerTestResult<T, 4>(actualOutput,
+ expectedOutput,
+ outputHandle->GetShape(),
+ outputTensorInfo.GetShape());
}
} // anonymous namespace
@@ -627,14 +631,15 @@ LayerTestResult<float,4> CompareBatchNormTest(
outputTensorInfo = armnn::TensorInfo(4, shape, armnn::DataType::Float32);
tensorInfo = armnn::TensorInfo(1, tensorShape, armnn::DataType::Float32);
- auto input = MakeRandomTensor<float, 4>(inputTensorInfo, 21312);
+ auto input = MakeRandomTensor<float>(inputTensorInfo, 21312);
- auto mean = MakeRandomTensor<float, 1>(tensorInfo, 123);
- auto variance = MakeRandomTensor<float, 1>(tensorInfo, 234, 0.0f);
- auto beta = MakeRandomTensor<float, 1>(tensorInfo, 123);
- auto gamma = MakeRandomTensor<float, 1>(tensorInfo, 345);
+ auto mean = MakeRandomTensor<float>(tensorInfo, 123);
+ auto variance = MakeRandomTensor<float>(tensorInfo, 234, 0.0f);
+ auto beta = MakeRandomTensor<float>(tensorInfo, 123);
+ auto gamma = MakeRandomTensor<float>(tensorInfo, 345);
- LayerTestResult<float,4> ret(outputTensorInfo);
+ std::vector<float> actualOutput(outputTensorInfo.GetNumElements());
+ std::vector<float> expectedOutput(outputTensorInfo.GetNumElements());
std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo);
std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo);
@@ -675,16 +680,19 @@ LayerTestResult<float,4> CompareBatchNormTest(
inputHandleRef->Allocate();
outputHandleRef->Allocate();
- CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
- CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0][0][0]);
+ CopyDataToITensorHandle(inputHandle.get(), input.data());
+ CopyDataToITensorHandle(inputHandleRef.get(), input.data());
workload->PostAllocationConfigure();
workload->Execute();
workloadRef->PostAllocationConfigure();
workloadRef->Execute();
- CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
- CopyDataFromITensorHandle(&ret.outputExpected[0][0][0][0], outputHandleRef.get());
+ CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get());
+ CopyDataFromITensorHandle(expectedOutput.data(), outputHandleRef.get());
- return ret;
+ return LayerTestResult<float, 4>(actualOutput,
+ expectedOutput,
+ outputHandle->GetShape(),
+ outputTensorInfo.GetShape());
}