24 struct Simple3dSoftmaxOutputData
26 const std::vector<float> outputData =
28 0.0964599f, 0.26220518f, 0.0964599f, 0.0964599f,
29 0.15903549f, 0.0964599f, 0.0964599f, 0.0964599f
34 const std::vector<float> inputData =
36 0.0f, 1.0f, 0.0f, 0.0f,
37 0.5f, 0.0f, 0.0f, 0.0f,
41 struct Simple4dSoftmaxData
45 const std::vector<float> outputData =
47 0.0964599f, 0.26220518f, 0.0964599f, 0.0964599f,
48 0.15903549f, 0.0964599f, 0.0964599f, 0.0964599f
51 const std::vector<float> inputData =
53 0.0f, 1.0f, 0.0f, 0.0f,
54 0.5f, 0.0f, 0.0f, 0.0f
58 template<armnn::DataType ArmnnType, std::
size_t n,
typename T = armnn::ResolveType<ArmnnType>>
64 const std::vector<float>& outputData,
65 const std::vector<float>& inputData,
68 boost::ignore_unused(memoryManager);
71 const float qScale = 1.f / 256.f;
72 const int qOffset = 0;
88 auto input = MakeTensor<T, n>(inputTensorInfo, armnnUtils::QuantizedVector<T>(inputData, qScale, qOffset));
90 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.
CreateTensorHandle(inputTensorInfo);
91 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.
CreateTensorHandle(outputTensorInfo);
98 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
99 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
101 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.
CreateSoftmax(data, info);
103 inputHandle->Allocate();
104 outputHandle->Allocate();
107 BOOST_ASSERT(workload);
109 ExecuteWorkload(*workload, memoryManager);
113 std::vector<T> expectedOutput = armnnUtils::QuantizedVector<T>(outputData, qScale, qOffset);
114 ret.outputExpected = MakeTensor<T, n>(outputTensorInfo, expectedOutput);
119 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
128 float x0[4] = { exp((0.f - 1.0f) * beta), exp((1.0f - 1.0f) * beta),
129 exp((0.0f - 1.0f) * beta), exp((0.0f - 1.0f) * beta) };
130 float sum0 = x0[0] + x0[1] + x0[2] + x0[3];
131 float x1[4] = { exp((0.5f - 0.5f) * beta), exp((0.0f - 0.5f) * beta),
132 exp((0.0f - 0.5f) * beta), exp((0.0f - 0.5f) * beta) };
133 float sum1 = x1[0] + x1[1] + x1[2] + x1[3];
135 const std::vector<float> outputData = { x0[0] / sum0, x0[1] / sum0, x0[2] / sum0, x0[3] / sum0,
136 x1[0] / sum1, x1[1] / sum1, x1[2] / sum1, x1[3] / sum1 };
138 const std::vector<float> inputData =
144 return SimpleSoftmaxBaseTestImpl<ArmnnType, 2>(workloadFactory, memoryManager, beta,
145 inputShape, outputData, inputData);
148 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
156 std::vector<float> inputData;
157 std::vector<float> outputData;
167 17.0f, -1.0f, 16.0f, -2.0f, 15.0f, -3.0f, 14.0f, -4.0f, 1.0f, -17.0f
172 0.643914213228014f, 0.643914213228014f, 0.236882800924671f, 0.236882800924671f,
174 0.087144312427294f, 0.032058600957022f, 0.032058600957022f, 7.246299848982885e-08f,
175 7.246299848982885e-08f
186 17.0f, 16.0f, 15.0f, 14.0f, 1.0f, -1.0f, -2.0f, -3.0f, -4.0f, -17.0f
191 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
192 7.246299848982885e-08f,
193 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
194 7.246299848982885e-08f
199 return SimpleSoftmaxBaseTestImpl<ArmnnType, 2>(workloadFactory, memoryManager, beta,
200 inputShape, outputData, inputData, axis);
203 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
209 const std::vector<float>& outputData,
210 const std::vector<float>& inputData,
213 return SimpleSoftmaxBaseTestImpl<ArmnnType, 3>(workloadFactory, memoryManager, beta,
214 inputShape, outputData, inputData, axis);
217 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
223 const std::vector<float>& outputData,
224 const std::vector<float>& inputData,
228 return SimpleSoftmaxBaseTestImpl<ArmnnType, 4>(workloadFactory, memoryManager, beta,
229 inputShape, outputData, inputData, axis);
232 template<armnn::DataType ArmnnType,
typename T = armnn::ResolveType<ArmnnType>>
240 const int batchSize = 20;
241 const int channels = 30;
246 unsigned int inputShape[] = { batchSize, channels };
250 float qScale = 1.f / 256.f;
259 auto input = MakeRandomTensor<T, 2>(inputTensorInfo, 0xF00D, 0.0f, 1.0f);
261 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.
CreateTensorHandle(inputTensorInfo);
262 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.
CreateTensorHandle(outputTensorInfo);
268 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
269 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
271 std::unique_ptr<armnn::ITensorHandle> outputHandleRef = refWorkloadFactory.
CreateTensorHandle(outputTensorInfo);
272 std::unique_ptr<armnn::ITensorHandle> inputHandleRef = refWorkloadFactory.
CreateTensorHandle(inputTensorInfo);
277 SetWorkloadInput(refData, refInfo, 0, inputTensorInfo, inputHandleRef.get());
278 SetWorkloadOutput(refData, refInfo, 0, outputTensorInfo, outputHandleRef.get());
280 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.
CreateSoftmax(data, info);
281 std::unique_ptr<armnn::IWorkload> workloadRef = refWorkloadFactory.
CreateSoftmax(refData, refInfo);
283 outputHandleRef->Allocate();
284 inputHandleRef->Allocate();
286 inputHandle->Allocate();
287 outputHandle->Allocate();
292 ExecuteWorkload(*workload, memoryManager);
294 workloadRef->Execute();
309 return SimpleSoftmaxTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, beta);
318 return SimpleSoftmaxTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, beta, axis);
326 Simple3dSoftmaxOutputData data;
327 return Simple3dSoftmaxTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, beta,
328 data.inputShape, data.outputData, data.inputData);
338 std::vector<float> inputData;
339 std::vector<float> outputData;
345 inputShape = {5, 2, 2};
349 17.0f, -1.0f, 17.0f, -1.0f, 16.0f, -2.0f, 16.0f, -2.0f, 15.0f, -3.0f,
351 15.0f, -3.0f, 14.0f, -4.0f, 14.0f, -4.0f, 1.0f, -17.0f, 1.0f, -17.0f
356 0.643914213228014f, 0.643914213228014f, 0.643914213228014f, 0.643914213228014f,
358 0.236882800924671f, 0.236882800924671f, 0.236882800924671f, 0.087144312427294f,
361 0.087144312427294f, 0.087144312427294f, 0.032058600957022f, 0.032058600957022f,
363 0.032058600957022f, 7.246299848982885e-08f, 7.246299848982885e-08f, 7.246299848982885e-08f,
364 7.246299848982885e-08f
371 inputShape = {2, 5, 2};
375 17.0f, -1.0f, 16.0f, -2.0f, 15.0f, -3.0f, 14.0f, -4.0f, 1.0f, -17.0f,
377 17.0f, -1.0f, 16.0f, -2.0f, 15.0f, -3.0f, 14.0f, -4.0f, 1.0f, -17.0f
382 0.643914213228014f, 0.643914213228014f, 0.236882800924671f, 0.236882800924671f,
384 0.087144312427294f, 0.032058600957022f, 0.032058600957022f, 7.246299848982885e-08f,
385 7.246299848982885e-08f,
387 0.643914213228014f, 0.643914213228014f, 0.236882800924671f, 0.236882800924671f,
389 0.087144312427294f, 0.032058600957022f, 0.032058600957022f, 7.246299848982885e-08f,
390 7.246299848982885e-08f
397 inputShape = {2, 2, 5};
401 17.0f, 16.0f, 15.0f, 14.0f, 1.0f, -1.0f, -2.0f, -3.0f, -4.0f, -17.0f,
402 17.0f, 16.0f, 15.0f, 14.0f, 1.0f, -1.0f, -2.0f, -3.0f, -4.0f, -17.0f
407 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
408 7.246299848982885e-08f,
409 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
410 7.246299848982885e-08f,
412 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
413 7.246299848982885e-08f,
414 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
415 7.246299848982885e-08f
421 return Simple3dSoftmaxTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, beta,
422 inputShape, outputData, inputData, axis);
430 Simple4dSoftmaxData data;
431 return Simple4dSoftmaxTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, beta, data.inputShape,
432 data.outputData, data.inputData);
442 std::vector<float> inputData;
443 std::vector<float> outputData;
449 inputShape = {5, 2, 2, 2};
453 17.0f, -1.0f, 17.0f, -1.0f, 17.0f, -1.0f, 17.0f, -1.0f, 16.0f, -2.0f,
454 16.0f, -2.0f, 16.0f, -2.0f, 16.0f, -2.0f, 15.0f, -3.0f, 15.0f, -3.0f,
455 15.0f, -3.0f, 15.0f, -3.0f, 14.0f, -4.0f, 14.0f, -4.0f, 14.0f, -4.0f,
456 14.0f, -4.0f, 1.0f, -17.0f, 1.0f, -17.0f, 1.0f, -17.0f, 1.0f, -17.0f
461 0.643914213228014f, 0.643914213228014f, 0.643914213228014f, 0.643914213228014f,
463 0.643914213228014f, 0.643914213228014f, 0.643914213228014f, 0.236882800924671f,
465 0.236882800924671f, 0.236882800924671f, 0.236882800924671f, 0.236882800924671f,
467 0.236882800924671f, 0.087144312427294f, 0.087144312427294f, 0.087144312427294f,
470 0.087144312427294f, 0.087144312427294f, 0.087144312427294f, 0.087144312427294f,
472 0.032058600957022f, 0.032058600957022f, 0.032058600957022f, 0.032058600957022f,
474 0.032058600957022f, 0.032058600957022f, 7.246299848982885e-08f, 7.246299848982885e-08f,
475 7.246299848982885e-08f,
476 7.246299848982885e-08f, 7.246299848982885e-08f, 7.246299848982885e-08f,
477 7.246299848982885e-08f, 7.246299848982885e-08f
484 inputShape = {2, 5, 2, 2};
488 17.0f, -1.0f, 17.0f, -1.0f, 16.0f, -2.0f, 16.0f, -2.0f, 15.0f, -3.0f,
489 15.0f, -3.0f, 14.0f, -4.0f, 14.0f, -4.0f, 1.0f, -17.0f, 1.0f, -17.0f,
490 17.0f, -1.0f, 17.0f, -1.0f, 16.0f, -2.0f, 16.0f, -2.0f, 15.0f, -3.0f,
491 15.0f, -3.0f, 14.0f, -4.0f, 14.0f, -4.0f, 1.0f, -17.0f, 1.0f, -17.0f
496 0.643914213228014f, 0.643914213228014f, 0.643914213228014f, 0.643914213228014f,
498 0.236882800924671f, 0.236882800924671f, 0.236882800924671f, 0.087144312427294f,
500 0.087144312427294f, 0.087144312427294f, 0.032058600957022f, 0.032058600957022f,
502 0.032058600957022f, 7.246299848982885e-08f, 7.246299848982885e-08f, 7.246299848982885e-08f,
503 7.246299848982885e-08f,
506 0.643914213228014f, 0.643914213228014f, 0.643914213228014f, 0.643914213228014f,
508 0.236882800924671f, 0.236882800924671f, 0.236882800924671f, 0.087144312427294f,
510 0.087144312427294f, 0.087144312427294f, 0.032058600957022f, 0.032058600957022f,
512 0.032058600957022f, 7.246299848982885e-08f, 7.246299848982885e-08f, 7.246299848982885e-08f,
513 7.246299848982885e-08f
520 inputShape = {2, 2, 5, 2};
524 17.0f, -1.0f, 16.0f, -2.0f, 15.0f, -3.0f, 14.0f, -4.0f, 1.0f, -17.0f,
525 17.0f, -1.0f, 16.0f, -2.0f, 15.0f, -3.0f, 14.0f, -4.0f, 1.0f, -17.0f,
526 17.0f, -1.0f, 16.0f, -2.0f, 15.0f, -3.0f, 14.0f, -4.0f, 1.0f, -17.0f,
527 17.0f, -1.0f, 16.0f, -2.0f, 15.0f, -3.0f, 14.0f, -4.0f, 1.0f, -17.0f
532 0.643914213228014f, 0.643914213228014f, 0.236882800924671f, 0.236882800924671f,
534 0.087144312427294f, 0.032058600957022f, 0.032058600957022f, 7.246299848982885e-08f,
535 7.246299848982885e-08f,
536 0.643914213228014f, 0.643914213228014f, 0.236882800924671f, 0.236882800924671f,
538 0.087144312427294f, 0.032058600957022f, 0.032058600957022f, 7.246299848982885e-08f,
539 7.246299848982885e-08f,
541 0.643914213228014f, 0.643914213228014f, 0.236882800924671f, 0.236882800924671f,
543 0.087144312427294f, 0.032058600957022f, 0.032058600957022f, 7.246299848982885e-08f,
544 7.246299848982885e-08f,
545 0.643914213228014f, 0.643914213228014f, 0.236882800924671f, 0.236882800924671f,
547 0.087144312427294f, 0.032058600957022f, 0.032058600957022f, 7.246299848982885e-08f,
548 7.246299848982885e-08f
555 inputShape = {2, 2, 2, 5};
559 17.0f, 16.0f, 15.0f, 14.0f, 1.0f, -1.0f, -2.0f, -3.0f, -4.0f, -17.0f,
560 17.0f, 16.0f, 15.0f, 14.0f, 1.0f, -1.0f, -2.0f, -3.0f, -4.0f, -17.0f,
561 17.0f, 16.0f, 15.0f, 14.0f, 1.0f, -1.0f, -2.0f, -3.0f, -4.0f, -17.0f,
562 17.0f, 16.0f, 15.0f, 14.0f, 1.0f, -1.0f, -2.0f, -3.0f, -4.0f, -17.0f
567 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
568 7.246299848982885e-08f,
569 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
570 7.246299848982885e-08f,
571 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
572 7.246299848982885e-08f,
573 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
574 7.246299848982885e-08f,
576 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
577 7.246299848982885e-08f,
578 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
579 7.246299848982885e-08f,
580 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
581 7.246299848982885e-08f,
582 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
583 7.246299848982885e-08f
589 return Simple4dSoftmaxTestImpl<armnn::DataType::Float32>(
604 return SimpleSoftmaxTestImpl<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, beta);
612 Simple3dSoftmaxOutputData data;
613 return Simple3dSoftmaxTestImpl<armnn::DataType::QAsymmU8>(
627 Simple4dSoftmaxData data;
629 return Simple4dSoftmaxTestImpl<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, beta,
630 data.inputShape, data.outputData, data.inputData);
638 return SimpleSoftmaxTestImpl<armnn::DataType::Float16>(workloadFactory, memoryManager, beta);
646 Simple3dSoftmaxOutputData data;
647 return Simple3dSoftmaxTestImpl<armnn::DataType::Float16>(workloadFactory, memoryManager, beta,
648 data.inputShape, data.outputData, data.inputData);
656 Simple4dSoftmaxData data;
657 return Simple4dSoftmaxTestImpl<armnn::DataType::Float16>(workloadFactory, memoryManager, beta,
658 data.inputShape, data.outputData, data.inputData);
666 return SimpleSoftmaxTestImpl<armnn::DataType::QSymmS16>(workloadFactory, memoryManager, beta);
674 Simple3dSoftmaxOutputData data;
675 return Simple3dSoftmaxTestImpl<armnn::DataType::QSymmS16>(workloadFactory, memoryManager, beta,
676 data.inputShape, data.outputData, data.inputData);
684 Simple4dSoftmaxData data;
686 return Simple4dSoftmaxTestImpl<armnn::DataType::QSymmS16>(workloadFactory, memoryManager, beta,
687 data.inputShape, data.outputData, data.inputData);
696 return CompareSoftmaxTestImpl<armnn::DataType::Float32>(
697 workloadFactory, memoryManager, refWorkloadFactory, beta);
706 return CompareSoftmaxTestImpl<armnn::DataType::QAsymmU8>(
707 workloadFactory, memoryManager, refWorkloadFactory, beta);
LayerTestResult< int16_t, 4 > Simple4dSoftmaxUint16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, float beta)
LayerTestResult< int16_t, 2 > SimpleSoftmaxUint16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, float beta)
LayerTestResult< armnn::Half, 4 > Simple4dSoftmaxFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, float beta)
LayerTestResult< float, 3 > Simple3dSoftmaxTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, float beta)
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)
LayerDescriptor m_Parameters
virtual std::unique_ptr< ITensorHandle > CreateTensorHandle(const TensorInfo &tensorInfo, const bool IsMemoryManaged=true) const =0
void CopyDataFromITensorHandle(void *memory, const armnn::ITensorHandle *tensorHandle)
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
LayerTestResult< uint8_t, 2 > CompareSoftmaxUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, armnn::IWorkloadFactory &refWorkloadFactory, float beta)
virtual std::unique_ptr< IWorkload > CreateSoftmax(const SoftmaxQueueDescriptor &descriptor, const WorkloadInfo &info) const
float m_Beta
Exponentiation value.
LayerTestResult< float, 4 > Simple4dAxisSoftmaxTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, float beta, int axis)
LayerTestResult< armnn::Half, 3 > Simple3dSoftmaxFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, float beta)
void SetQuantizationScale(float scale)
LayerTestResult< uint8_t, 3 > Simple3dSoftmaxUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, float beta)
LayerTestResult< uint8_t, 4 > Simple4dSoftmaxUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, float beta)
LayerTestResult< uint8_t, 2 > SimpleSoftmaxUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, float beta)
LayerTestResult< float, 2 > CompareSoftmaxTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, armnn::IWorkloadFactory &refWorkloadFactory, float beta)
LayerTestResult< float, 2 > SimpleAxisSoftmaxTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, float beta, int axis)
LayerTestResult< float, 4 > Simple4dSoftmaxTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, float beta)
LayerTestResult< float, 2 > SimpleSoftmaxTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, float beta)
void SetQuantizationOffset(int32_t offset)
LayerTestResult< armnn::Half, 2 > SimpleSoftmaxFloat16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, float beta)
LayerTestResult< float, 3 > Simple3dAxisSoftmaxTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, float beta, int axis)
int m_Axis
Scalar, defaulted to the last index (-1), specifying the dimension the activation will be performed o...
LayerTestResult< int16_t, 3 > Simple3dSoftmaxUint16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, float beta)