blob: 018f7f519092a709ef73efadbbaead232446224a [file] [log] [blame]
Sadik Armagan6e36a642020-11-10 21:18:41 +00001//
2// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "FullyConnectedTestHelper.hpp"
7
8namespace
9{
10
Sadik Armagan6e36a642020-11-10 21:18:41 +000011void FullyConnectedFp32Test(std::vector<armnn::BackendId>& backends)
12{
13 std::vector<int32_t> inputTensorShape { 1, 4, 1, 1 };
14 std::vector<int32_t> weightsTensorShape { 1, 4 };
15 std::vector<int32_t> biasTensorShape { 1 };
16 std::vector<int32_t> outputTensorShape { 1, 1 };
17
18 std::vector<float> inputValues = { 10, 20, 30, 40 };
19 std::vector<float> weightsData = { 2, 3, 4, 5 };
20
21 std::vector<float> expectedOutputValues = { (400 + 10) };
22
23 // bias is set std::vector<float> biasData = { 10 } in the model
24 FullyConnectedTest<float>(backends,
25 ::tflite::TensorType_FLOAT32,
26 tflite::ActivationFunctionType_NONE,
27 inputTensorShape,
28 weightsTensorShape,
29 biasTensorShape,
30 outputTensorShape,
31 inputValues,
32 expectedOutputValues,
33 weightsData);
34}
35
36void FullyConnectedActicationTest(std::vector<armnn::BackendId>& backends)
37{
38 std::vector<int32_t> inputTensorShape { 1, 4, 1, 1 };
39 std::vector<int32_t> weightsTensorShape { 1, 4 };
40 std::vector<int32_t> biasTensorShape { 1 };
41 std::vector<int32_t> outputTensorShape { 1, 1 };
42
43 std::vector<float> inputValues = { -10, 20, 30, 40 };
44 std::vector<float> weightsData = { 2, 3, 4, -5 };
45
46 std::vector<float> expectedOutputValues = { 0 };
47
48 // bias is set std::vector<float> biasData = { 10 } in the model
49 FullyConnectedTest<float>(backends,
50 ::tflite::TensorType_FLOAT32,
51 tflite::ActivationFunctionType_RELU,
52 inputTensorShape,
53 weightsTensorShape,
54 biasTensorShape,
55 outputTensorShape,
56 inputValues,
57 expectedOutputValues,
58 weightsData);
59}
60
Narumol Prangnawarat55518ca2020-11-20 14:50:54 +000061void FullyConnectedInt8Test(std::vector<armnn::BackendId>& backends)
Sadik Armagan6e36a642020-11-10 21:18:41 +000062{
63 std::vector<int32_t> inputTensorShape { 1, 4, 2, 1 };
64 std::vector<int32_t> weightsTensorShape { 1, 4 };
65 std::vector<int32_t> biasTensorShape { 1 };
66 std::vector<int32_t> outputTensorShape { 2, 1 };
67
Narumol Prangnawarat55518ca2020-11-20 14:50:54 +000068 std::vector<int8_t> inputValues = { 1, 2, 3, 4, 5, 10, 15, 20 };
69 std::vector<int8_t> weightsData = { 2, 3, 4, 5 };
Sadik Armagan6e36a642020-11-10 21:18:41 +000070
Narumol Prangnawarat55518ca2020-11-20 14:50:54 +000071 std::vector<int8_t> expectedOutputValues = { 25, 105 }; // (40 + 10) / 2, (200 + 10) / 2
Sadik Armagan6e36a642020-11-10 21:18:41 +000072
73 // bias is set std::vector<int32_t> biasData = { 10 } in the model
74 // input and weights quantization scale 1.0f and offset 0 in the model
75 // output quantization scale 2.0f and offset 0 in the model
Narumol Prangnawarat55518ca2020-11-20 14:50:54 +000076 FullyConnectedTest<int8_t>(backends,
77 ::tflite::TensorType_INT8,
78 tflite::ActivationFunctionType_NONE,
79 inputTensorShape,
80 weightsTensorShape,
81 biasTensorShape,
82 outputTensorShape,
83 inputValues,
84 expectedOutputValues,
85 weightsData);
Sadik Armagan6e36a642020-11-10 21:18:41 +000086}
87
Narumol Prangnawarat55518ca2020-11-20 14:50:54 +000088TEST_SUITE("FullyConnected_GpuAccTests")
Sadik Armagan6e36a642020-11-10 21:18:41 +000089{
Narumol Prangnawarat55518ca2020-11-20 14:50:54 +000090
91TEST_CASE ("FullyConnected_FP32_GpuAcc_Test")
92{
93 std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
Sadik Armagan6e36a642020-11-10 21:18:41 +000094 FullyConnectedFp32Test(backends);
95}
96
Narumol Prangnawarat55518ca2020-11-20 14:50:54 +000097TEST_CASE ("FullyConnected_Int8_GpuAcc_Test")
Sadik Armagan6e36a642020-11-10 21:18:41 +000098{
Narumol Prangnawarat55518ca2020-11-20 14:50:54 +000099 std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
100 FullyConnectedInt8Test(backends);
Sadik Armagan6e36a642020-11-10 21:18:41 +0000101}
102
Narumol Prangnawarat55518ca2020-11-20 14:50:54 +0000103TEST_CASE ("FullyConnected_Activation_GpuAcc_Test")
Sadik Armagan6e36a642020-11-10 21:18:41 +0000104{
Narumol Prangnawarat55518ca2020-11-20 14:50:54 +0000105 std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
Sadik Armagan6e36a642020-11-10 21:18:41 +0000106 FullyConnectedActicationTest(backends);
107}
108
Narumol Prangnawarat55518ca2020-11-20 14:50:54 +0000109} // End of TEST_SUITE("FullyConnected_GpuAccTests")
110
111TEST_SUITE("FullyConnected_CpuAccTests")
112{
113
114TEST_CASE ("FullyConnected_FP32_CpuAcc_Test")
115{
116 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
117 FullyConnectedFp32Test(backends);
118}
119
120TEST_CASE ("FullyConnected_Int8_CpuAcc_Test")
121{
122 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
123 FullyConnectedInt8Test(backends);
124}
125
126TEST_CASE ("FullyConnected_Activation_CpuAcc_Test")
127{
128 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
129 FullyConnectedActicationTest(backends);
130}
131
132} // End of TEST_SUITE("FullyConnected_CpuAccTests")
133
134TEST_SUITE("FullyConnected_CpuRefTests")
135{
136
137TEST_CASE ("FullyConnected_FP32_CpuRef_Test")
138{
139 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
140 FullyConnectedFp32Test(backends);
141}
142
143TEST_CASE ("FullyConnected_Int8_CpuRef_Test")
144{
145 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
146 FullyConnectedInt8Test(backends);
147}
148
149TEST_CASE ("FullyConnected_Activation_CpuRef_Test")
150{
151 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
152 FullyConnectedActicationTest(backends);
153}
154
155} // End of TEST_SUITE("FullyConnected_CpuRefTests")
Sadik Armagan6e36a642020-11-10 21:18:41 +0000156
157} // anonymous namespace