blob: 3aacfe0a04f0a1afce8a2a065a8bbb4db69db2d5 [file] [log] [blame]
James Warda8578102020-11-13 18:05:04 +00001//
2// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "SoftmaxTestHelper.hpp"
7
8#include <armnn_delegate.hpp>
9
10#include <flatbuffers/flatbuffers.h>
11#include <tensorflow/lite/schema/schema_generated.h>
12
13#include <doctest/doctest.h>
14
15namespace armnnDelegate
16{
17
18/// Convenience function to run softmax and log-softmax test cases
19/// \param operatorCode tflite::BuiltinOperator_SOFTMAX or tflite::BuiltinOperator_LOG_SOFTMAX
20/// \param backends armnn backends to target
21/// \param beta multiplicative parameter to the softmax function
22/// \param expectedOutput to be checked against transformed input
23void SoftmaxTestCase(tflite::BuiltinOperator operatorCode,
24 std::vector<armnn::BackendId> backends, float beta, std::vector<float> expectedOutput) {
25 std::vector<float> input = {
26 1.0, 2.5, 3.0, 4.5, 5.0,
27 -1.0, -2.5, -3.0, -4.5, -5.0};
28 std::vector<int32_t> shape = {2, 5};
29
30 SoftmaxTest(operatorCode,
31 tflite::TensorType_FLOAT32,
32 backends,
33 shape,
34 input,
35 expectedOutput,
36 beta);
37}
38
39TEST_SUITE ("Softmax_GpuAccTests")
40{
41
42TEST_CASE ("Softmax_Standard_Beta_GpuAcc_Test")
43{
44 std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
45 std::vector<float> expectedOutput = {0.00994190481, 0.0445565246, 0.0734612942, 0.329230666, 0.542809606,
46 0.710742831, 0.158588171, 0.0961885825, 0.0214625746, 0.0130177103};
47 SoftmaxTestCase(tflite::BuiltinOperator_SOFTMAX, backends, 1, expectedOutput);
48}
49
50TEST_CASE ("Softmax_Different_Beta_GpuAcc_Test")
51{
52 std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
53 std::vector<float> expectedOutput = {0.0946234912, 0.148399189, 0.172415257, 0.270400971, 0.314161092, 0.352414012,
54 0.224709094, 0.193408906, 0.123322964, 0.106145054};
55 SoftmaxTestCase(tflite::BuiltinOperator_SOFTMAX, backends, 0.3, expectedOutput);
56
57}
58
59TEST_CASE ("Log_Softmax_GpuAcc_Test")
60{
61 std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
62 std::vector<float> expectedOutput =
63 {-4.61099672, -3.11099672, -2.61099672, -1.11099672, -0.610996664,
64 -0.341444582, -1.84144461, -2.34144449, -3.84144449, -4.34144449};
65 SoftmaxTestCase(tflite::BuiltinOperator_LOG_SOFTMAX, backends, 0, expectedOutput);
66}
67} // TEST_SUITE ("Softmax_GpuAccTests")
68
69TEST_SUITE ("Softmax_CpuAccTests")
70{
71
72TEST_CASE ("Softmax_Standard_Beta_CpuAcc_Test")
73{
74 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
75 std::vector<float> expectedOutput = {0.00994190481, 0.0445565246, 0.0734612942, 0.329230666, 0.542809606,
76 0.710742831, 0.158588171, 0.0961885825, 0.0214625746, 0.0130177103};
77 SoftmaxTestCase(tflite::BuiltinOperator_SOFTMAX, backends, 1, expectedOutput);
78}
79
80TEST_CASE ("Softmax_Different_Beta_CpuAcc_Test")
81{
82 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
83 std::vector<float> expectedOutput = {
84 0.0946234912, 0.148399189, 0.172415257, 0.270400971, 0.314161092,
85 0.352414012, 0.224709094, 0.193408906, 0.123322964, 0.106145054};
86 SoftmaxTestCase(tflite::BuiltinOperator_SOFTMAX, backends, 0.3, expectedOutput);
87}
88
89TEST_CASE ("Log_Softmax_CpuAcc_Test")
90{
91 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
92 std::vector<float> expectedOutput =
93 {-4.61099672, -3.11099672, -2.61099672, -1.11099672, -0.610996664,
94 -0.341444582, -1.84144461, -2.34144449, -3.84144449, -4.34144449};
95 SoftmaxTestCase(tflite::BuiltinOperator_LOG_SOFTMAX, backends, 0, expectedOutput);
96}
97} // TEST_SUITE ("Softmax_CpuAccTests")
98
99TEST_SUITE ("Softmax_CpuRefTests")
100{
101
102TEST_CASE ("Softmax_Standard_Beta_CpuRef_Test")
103{
104 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
105 std::vector<float> expectedOutput = {
106 0.00994190481, 0.0445565246, 0.0734612942, 0.329230666, 0.542809606,
107 0.710742831, 0.158588171, 0.0961885825, 0.0214625746, 0.0130177103};
108 SoftmaxTestCase(tflite::BuiltinOperator_SOFTMAX, backends, 1, expectedOutput);
109}
110
111TEST_CASE ("Softmax_Different_Beta_CpuRef_Test")
112{
113 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
114 std::vector<float> expectedOutput = {
115 0.0946234912, 0.148399189, 0.172415257, 0.270400971, 0.314161092,
116 0.352414012, 0.224709094, 0.193408906, 0.123322964, 0.106145054};
117 SoftmaxTestCase(tflite::BuiltinOperator_SOFTMAX, backends, 0.3, expectedOutput);
118}
119
120TEST_CASE ("Log_Softmax_CpuRef_Test")
121{
122 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
123 std::vector<float> expectedOutput =
124 {-4.61099672, -3.11099672, -2.61099672, -1.11099672, -0.610996664,
125 -0.341444582, -1.84144461, -2.34144449, -3.84144449, -4.34144449};
126 SoftmaxTestCase(tflite::BuiltinOperator_LOG_SOFTMAX, backends, 0, expectedOutput);
127}
128} // TEST_SUITE ("Softmax_CpuRefTests")
129} // namespace armnnDelegate