18 template<armnn::DataType ArmnnType,
typename T, std::
size_t InputDim, std::
size_t OutputDim>
22 const unsigned int* inputShape,
23 const std::vector<float>& inputData,
24 const std::vector<unsigned int>& axis,
26 const unsigned int* outputShape,
27 const std::vector<float>& outputData,
36 inputTensorInfo.SetQuantizationScale(scale);
37 inputTensorInfo.SetQuantizationOffset(offset);
39 outputTensorInfo.SetQuantizationScale(scale);
40 outputTensorInfo.SetQuantizationOffset(offset);
42 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
45 result.outputExpected = MakeTensor<T, OutputDim>(
46 outputTensorInfo, ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
48 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.
CreateTensorHandle(inputTensorInfo);
49 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.
CreateTensorHandle(outputTensorInfo);
55 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
56 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
58 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.
CreateMean(data, info);
60 inputHandle->Allocate();
61 outputHandle->Allocate();
65 workload->PostAllocationConfigure();
75 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
80 const unsigned int inputShape[] = { 3, 2 };
81 const unsigned int outputShape[] = { 1 };
83 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
84 std::vector<float> output({ 2.5f });
86 return MeanTestHelper<ArmnnType, T, 2, 1>(
87 workloadFactory, memoryManager, inputShape, input, {},
false, outputShape, output);
90 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
95 const unsigned int inputShape[] = { 2, 3, 1, 2 };
96 const unsigned int outputShape[] = { 3, 1, 2 };
98 std::vector<float> input({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f, 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f });
99 std::vector<float> output({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f });
101 return MeanTestHelper<ArmnnType, T, 4, 3>(
102 workloadFactory, memoryManager, inputShape, input, { 0 },
false, outputShape, output);
105 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
110 const unsigned int inputShape[] = { 1, 1, 3, 2 };
111 const unsigned int outputShape[] = { 1, 1, 1, 2 };
113 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
114 std::vector<float> output({ 2.5f, 2.5f });
116 return MeanTestHelper<ArmnnType, T, 4, 4>(
117 workloadFactory, memoryManager, inputShape, input, { 2 },
true, outputShape, output);
120 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
125 const unsigned int inputShape[] = { 2, 3, 1, 2 };
126 const unsigned int outputShape[] = { 1, 3, 1, 1 };
128 std::vector<float> input({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f, 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5 });
129 std::vector<float> output({ 2.0f, 4.0f, 6.0f });
131 return MeanTestHelper<ArmnnType, T, 4, 4>(
132 workloadFactory, memoryManager, inputShape, input, { 0, 3 },
true, outputShape, output);
135 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
140 const unsigned int inputShape[] = { 4, 3, 2 };
141 const unsigned int outputShape[] = { 2 };
143 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f,
144 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
145 std::vector<float> output({ 12.0f, 13.0f });
147 return MeanTestHelper<ArmnnType, T, 3, 1>(
148 workloadFactory, memoryManager, inputShape, input, { 0, 1 },
false, outputShape, output);
151 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
156 const unsigned int inputShape[] = { 4, 3, 2 };
157 const unsigned int outputShape[] = { 1, 3, 1 };
159 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f,
160 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
161 std::vector<float> output({ 10.5f, 12.5f, 14.5f });
163 return MeanTestHelper<ArmnnType, T, 3, 3>(
164 workloadFactory, memoryManager, inputShape, input, { 0, 2 },
true, outputShape, output);
167 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
172 const unsigned int inputShape[] = { 1, 2, 2, 1 };
173 const unsigned int outputShape[] = { 1, 2, 1 };
175 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f });
176 std::vector<float> output({ 1.5f, 3.5f });
178 return MeanTestHelper<ArmnnType, T, 4, 3>(
179 workloadFactory, memoryManager, inputShape, input, { 2 },
false, outputShape, output);
LayerTestResult< T, 1 > MeanVts1Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 3 > MeanSimpleAxisTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 1 > MeanSimpleTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 3 > MeanVts2Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 3 > MeanVts3Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
void IgnoreUnused(Ts &&...)
LayerDescriptor m_Parameters
std::vector< unsigned int > m_Axis
Values for the dimensions to reduce.
bool m_KeepDims
Enable/disable keep dimensions. If true, then the reduced dimensions that are of length 1 are kept...
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
void CopyDataFromITensorHandle(void *memory, const armnn::ITensorHandle *tensorHandle)
virtual std::unique_ptr< ITensorHandle > CreateTensorHandle(const TensorInfo &tensorInfo, const bool IsMemoryManaged=true) const =0
virtual std::unique_ptr< IWorkload > CreateMean(const MeanQueueDescriptor &descriptor, const WorkloadInfo &Info) const
Contains information about inputs and outputs to a layer.
LayerTestResult< T, 4 > MeanKeepDimsTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 4 > MeanMultipleDimsTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)