// // Copyright © 2020 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #include "FullyConnectedTestHelper.hpp" namespace { TEST_SUITE("FullyConnectedTest") { void FullyConnectedFp32Test(std::vector& backends) { std::vector inputTensorShape { 1, 4, 1, 1 }; std::vector weightsTensorShape { 1, 4 }; std::vector biasTensorShape { 1 }; std::vector outputTensorShape { 1, 1 }; std::vector inputValues = { 10, 20, 30, 40 }; std::vector weightsData = { 2, 3, 4, 5 }; std::vector expectedOutputValues = { (400 + 10) }; // bias is set std::vector biasData = { 10 } in the model FullyConnectedTest(backends, ::tflite::TensorType_FLOAT32, tflite::ActivationFunctionType_NONE, inputTensorShape, weightsTensorShape, biasTensorShape, outputTensorShape, inputValues, expectedOutputValues, weightsData); } void FullyConnectedActicationTest(std::vector& backends) { std::vector inputTensorShape { 1, 4, 1, 1 }; std::vector weightsTensorShape { 1, 4 }; std::vector biasTensorShape { 1 }; std::vector outputTensorShape { 1, 1 }; std::vector inputValues = { -10, 20, 30, 40 }; std::vector weightsData = { 2, 3, 4, -5 }; std::vector expectedOutputValues = { 0 }; // bias is set std::vector biasData = { 10 } in the model FullyConnectedTest(backends, ::tflite::TensorType_FLOAT32, tflite::ActivationFunctionType_RELU, inputTensorShape, weightsTensorShape, biasTensorShape, outputTensorShape, inputValues, expectedOutputValues, weightsData); } void FullyConnectedUint8Test(std::vector& backends) { std::vector inputTensorShape { 1, 4, 2, 1 }; std::vector weightsTensorShape { 1, 4 }; std::vector biasTensorShape { 1 }; std::vector outputTensorShape { 2, 1 }; std::vector inputValues = { 1, 2, 3, 4, 10, 20, 30, 40 }; std::vector weightsData = { 2, 3, 4, 5 }; std::vector expectedOutputValues = { (40 + 10) / 2, (400 + 10) / 2 }; // bias is set std::vector biasData = { 10 } in the model // input and weights quantization scale 1.0f and offset 0 in the model // output quantization scale 2.0f and offset 0 in the model FullyConnectedTest(backends, ::tflite::TensorType_UINT8, tflite::ActivationFunctionType_NONE, inputTensorShape, weightsTensorShape, biasTensorShape, outputTensorShape, inputValues, expectedOutputValues, weightsData); } TEST_CASE ("FULLY_CONNECTED_FP32_GpuAcc_Test") { std::vector backends = { armnn::Compute::GpuAcc, armnn::Compute::CpuRef }; FullyConnectedFp32Test(backends); } TEST_CASE ("FULLY_CONNECTED_FP32_CpuAcc_Test") { std::vector backends = { armnn::Compute::CpuAcc, armnn::Compute::CpuRef }; FullyConnectedFp32Test(backends); } TEST_CASE ("FULLY_CONNECTED_UINT8_GpuAcc_Test") { std::vector backends = { armnn::Compute::GpuAcc, armnn::Compute::CpuRef }; FullyConnectedUint8Test(backends); } TEST_CASE ("FULLY_CONNECTED_UINT8_CpuAcc_Test") { std::vector backends = { armnn::Compute::GpuAcc, armnn::Compute::CpuRef }; FullyConnectedUint8Test(backends); } TEST_CASE ("FULLY_CONNECTED_Activation_GpuAcc_Test") { std::vector backends = { armnn::Compute::GpuAcc, armnn::Compute::CpuRef }; FullyConnectedActicationTest(backends); } } // End of TEST_SUITE("FullyConnectedTest") } // anonymous namespace