1 // 2 // Copyright © 2017 Arm Ltd. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 6 #include "ParserFlatbuffersSerializeFixture.hpp" 7 #include <armnnDeserializer/IDeserializer.hpp> 8 9 #include <doctest/doctest.h> 10 11 #include <string> 12 13 TEST_SUITE("DeserializeParser_Activation") 14 { 15 struct ActivationFixture : public ParserFlatbuffersSerializeFixture 16 { ActivationFixtureActivationFixture17 explicit ActivationFixture(const std::string& inputShape, 18 const std::string& outputShape, 19 const std::string& dataType, 20 const std::string& activationType="Sigmoid", 21 const std::string& a = "0.0", 22 const std::string& b = "0.0") 23 { 24 m_JsonString = R"( 25 { 26 inputIds: [0], 27 outputIds: [2], 28 layers: [{ 29 layer_type: "InputLayer", 30 layer: { 31 base: { 32 layerBindingId: 0, 33 base: { 34 index: 0, 35 layerName: "InputLayer", 36 layerType: "Input", 37 inputSlots: [{ 38 index: 0, 39 connection: {sourceLayerIndex:0, outputSlotIndex:0 }, 40 }], 41 outputSlots: [{ 42 index: 0, 43 tensorInfo: { 44 dimensions: )" + inputShape + R"(, 45 dataType: )" + dataType + R"( 46 }, 47 }], 48 }, 49 } 50 }, 51 }, 52 { 53 layer_type: "ActivationLayer", 54 layer : { 55 base: { 56 index:1, 57 layerName: "ActivationLayer", 58 layerType: "Activation", 59 inputSlots: [{ 60 index: 0, 61 connection: {sourceLayerIndex:0, outputSlotIndex:0 }, 62 }], 63 outputSlots: [{ 64 index: 0, 65 tensorInfo: { 66 dimensions: )" + outputShape + R"(, 67 dataType: )" + dataType + R"( 68 }, 69 }], 70 }, 71 descriptor: { 72 a: )" + a + R"(, 73 b: )" + b + R"(, 74 activationFunction: )" + activationType + R"( 75 }, 76 }, 77 }, 78 { 79 layer_type: "OutputLayer", 80 layer: { 81 base:{ 82 layerBindingId: 2, 83 base: { 84 index: 2, 85 layerName: "OutputLayer", 86 layerType: "Output", 87 inputSlots: [{ 88 index: 0, 89 connection: {sourceLayerIndex:1, outputSlotIndex:0 }, 90 }], 91 outputSlots: [{ 92 index: 0, 93 tensorInfo: { 94 dimensions: )" + outputShape + R"(, 95 dataType: )" + dataType + R"( 96 }, 97 }], 98 } 99 } 100 }, 101 }] 102 } 103 )"; 104 Setup(); 105 } 106 }; 107 108 struct SimpleActivationFixture : ActivationFixture 109 { SimpleActivationFixtureSimpleActivationFixture110 SimpleActivationFixture() : ActivationFixture("[1, 2, 2, 1]", 111 "[1, 2, 2, 1]", 112 "QuantisedAsymm8", 113 "ReLu") {} 114 }; 115 116 struct SimpleActivationFixture2 : ActivationFixture 117 { SimpleActivationFixture2SimpleActivationFixture2118 SimpleActivationFixture2() : ActivationFixture("[1, 2, 2, 1]", 119 "[1, 2, 2, 1]", 120 "Float32", 121 "ReLu") {} 122 }; 123 124 struct SimpleActivationFixture3 : ActivationFixture 125 { SimpleActivationFixture3SimpleActivationFixture3126 SimpleActivationFixture3() : ActivationFixture("[1, 2, 2, 1]", 127 "[1, 2, 2, 1]", 128 "QuantisedAsymm8", 129 "BoundedReLu", 130 "5.0", 131 "0.0") {} 132 }; 133 134 struct SimpleActivationFixture4 : ActivationFixture 135 { SimpleActivationFixture4SimpleActivationFixture4136 SimpleActivationFixture4() : ActivationFixture("[1, 2, 2, 1]", 137 "[1, 2, 2, 1]", 138 "Float32", 139 "BoundedReLu", 140 "5.0", 141 "0.0") {} 142 }; 143 144 145 TEST_CASE_FIXTURE(SimpleActivationFixture, "ActivationReluQuantisedAsymm8") 146 { 147 RunTest<4, armnn::DataType::QAsymmU8>( 148 0, 149 {{"InputLayer", {10, 0, 2, 0}}}, 150 {{"OutputLayer", {10, 0, 2, 0}}}); 151 } 152 153 TEST_CASE_FIXTURE(SimpleActivationFixture2, "ActivationReluFloat32") 154 { 155 RunTest<4, armnn::DataType::Float32>( 156 0, 157 {{"InputLayer", {111, -85, 226, 3}}}, 158 {{"OutputLayer", {111, 0, 226, 3}}}); 159 } 160 161 162 TEST_CASE_FIXTURE(SimpleActivationFixture3, "ActivationBoundedReluQuantisedAsymm8") 163 { 164 RunTest<4, armnn::DataType::QAsymmU8>( 165 0, 166 {{"InputLayer", {10, 0, 2, 0}}}, 167 {{"OutputLayer", {5, 0, 2, 0}}}); 168 } 169 170 TEST_CASE_FIXTURE(SimpleActivationFixture4, "ActivationBoundedReluFloat32") 171 { 172 RunTest<4, armnn::DataType::Float32>( 173 0, 174 {{"InputLayer", {111, -85, 226, 3}}}, 175 {{"OutputLayer", {5, 0, 5, 3}}}); 176 } 177 178 } 179