1 // clang-format off 2 // Generated file (from: quantized_lstm.mod.py). Do not edit 3 void CreateModel(Model *model) { 4 OperandType type0(Type::TENSOR_QUANT8_ASYMM, {2, 2}, 0.0078125f, 128); 5 OperandType type1(Type::TENSOR_QUANT8_ASYMM, {4, 2}, 0.00408021f, 100); 6 OperandType type2(Type::TENSOR_QUANT8_ASYMM, {4, 4}, 0.00408021f, 100); 7 OperandType type3(Type::TENSOR_INT32, {4}, 3.1876640625e-05f, 0); 8 OperandType type4(Type::TENSOR_QUANT16_SYMM, {2, 4}, 0.00048828125f, 0); 9 OperandType type5(Type::TENSOR_QUANT8_ASYMM, {2, 4}, 0.0078125f, 128); 10 // Phase 1, operands 11 auto input = model->addOperand(&type0); 12 auto inputToInputWeights = model->addOperand(&type1); 13 auto inputToForgetWeights = model->addOperand(&type1); 14 auto inputToCellWeights = model->addOperand(&type1); 15 auto inputToOutputWeights = model->addOperand(&type1); 16 auto recurrentToInputWeights = model->addOperand(&type2); 17 auto recurrentToForgetWeights = model->addOperand(&type2); 18 auto recurrentToCellWeights = model->addOperand(&type2); 19 auto recurrentToOutputWeights = model->addOperand(&type2); 20 auto inputGateBias = model->addOperand(&type3); 21 auto forgetGateBias = model->addOperand(&type3); 22 auto cellGateBias = model->addOperand(&type3); 23 auto outputGateBias = model->addOperand(&type3); 24 auto prevCellState = model->addOperand(&type4); 25 auto prevOutput = model->addOperand(&type5); 26 auto cellStateOut = model->addOperand(&type4); 27 auto output = model->addOperand(&type5); 28 // Phase 2, operations 29 model->addOperation(ANEURALNETWORKS_QUANTIZED_16BIT_LSTM, {input, inputToInputWeights, inputToForgetWeights, inputToCellWeights, inputToOutputWeights, recurrentToInputWeights, recurrentToForgetWeights, recurrentToCellWeights, recurrentToOutputWeights, inputGateBias, forgetGateBias, cellGateBias, outputGateBias, prevCellState, prevOutput}, {cellStateOut, output}); 30 // Phase 3, inputs and outputs 31 model->identifyInputsAndOutputs( 32 {input, inputToInputWeights, inputToForgetWeights, inputToCellWeights, inputToOutputWeights, recurrentToInputWeights, recurrentToForgetWeights, recurrentToCellWeights, recurrentToOutputWeights, inputGateBias, forgetGateBias, cellGateBias, outputGateBias, prevCellState, prevOutput}, 33 {cellStateOut, output}); 34 assert(model->isValid()); 35 } 36 37 inline bool is_ignored(int i) { 38 static std::set<int> ignore = {}; 39 return ignore.find(i) != ignore.end(); 40 } 41 42 void CreateModel_relaxed(Model *model) { 43 OperandType type0(Type::TENSOR_QUANT8_ASYMM, {2, 2}, 0.0078125f, 128); 44 OperandType type1(Type::TENSOR_QUANT8_ASYMM, {4, 2}, 0.00408021f, 100); 45 OperandType type2(Type::TENSOR_QUANT8_ASYMM, {4, 4}, 0.00408021f, 100); 46 OperandType type3(Type::TENSOR_INT32, {4}, 3.1876640625e-05f, 0); 47 OperandType type4(Type::TENSOR_QUANT16_SYMM, {2, 4}, 0.00048828125f, 0); 48 OperandType type5(Type::TENSOR_QUANT8_ASYMM, {2, 4}, 0.0078125f, 128); 49 // Phase 1, operands 50 auto input = model->addOperand(&type0); 51 auto inputToInputWeights = model->addOperand(&type1); 52 auto inputToForgetWeights = model->addOperand(&type1); 53 auto inputToCellWeights = model->addOperand(&type1); 54 auto inputToOutputWeights = model->addOperand(&type1); 55 auto recurrentToInputWeights = model->addOperand(&type2); 56 auto recurrentToForgetWeights = model->addOperand(&type2); 57 auto recurrentToCellWeights = model->addOperand(&type2); 58 auto recurrentToOutputWeights = model->addOperand(&type2); 59 auto inputGateBias = model->addOperand(&type3); 60 auto forgetGateBias = model->addOperand(&type3); 61 auto cellGateBias = model->addOperand(&type3); 62 auto outputGateBias = model->addOperand(&type3); 63 auto prevCellState = model->addOperand(&type4); 64 auto prevOutput = model->addOperand(&type5); 65 auto cellStateOut = model->addOperand(&type4); 66 auto output = model->addOperand(&type5); 67 // Phase 2, operations 68 model->addOperation(ANEURALNETWORKS_QUANTIZED_16BIT_LSTM, {input, inputToInputWeights, inputToForgetWeights, inputToCellWeights, inputToOutputWeights, recurrentToInputWeights, recurrentToForgetWeights, recurrentToCellWeights, recurrentToOutputWeights, inputGateBias, forgetGateBias, cellGateBias, outputGateBias, prevCellState, prevOutput}, {cellStateOut, output}); 69 // Phase 3, inputs and outputs 70 model->identifyInputsAndOutputs( 71 {input, inputToInputWeights, inputToForgetWeights, inputToCellWeights, inputToOutputWeights, recurrentToInputWeights, recurrentToForgetWeights, recurrentToCellWeights, recurrentToOutputWeights, inputGateBias, forgetGateBias, cellGateBias, outputGateBias, prevCellState, prevOutput}, 72 {cellStateOut, output}); 73 // Phase 4: set relaxed execution 74 model->relaxComputationFloat32toFloat16(true); 75 assert(model->isValid()); 76 } 77 78 inline bool is_ignored_relaxed(int i) { 79 static std::set<int> ignore = {}; 80 return ignore.find(i) != ignore.end(); 81 } 82 83 void CreateModel_dynamic_output_shape(Model *model) { 84 OperandType type0(Type::TENSOR_QUANT8_ASYMM, {2, 2}, 0.0078125f, 128); 85 OperandType type1(Type::TENSOR_QUANT8_ASYMM, {4, 2}, 0.00408021f, 100); 86 OperandType type10(Type::TENSOR_QUANT8_ASYMM, {0, 0}, 0.0078125f, 128); 87 OperandType type2(Type::TENSOR_QUANT8_ASYMM, {4, 4}, 0.00408021f, 100); 88 OperandType type3(Type::TENSOR_INT32, {4}, 3.1876640625e-05f, 0); 89 OperandType type4(Type::TENSOR_QUANT16_SYMM, {2, 4}, 0.00048828125f, 0); 90 OperandType type5(Type::TENSOR_QUANT8_ASYMM, {2, 4}, 0.0078125f, 128); 91 OperandType type9(Type::TENSOR_QUANT16_SYMM, {0, 0}, 0.00048828125f, 0); 92 // Phase 1, operands 93 auto input = model->addOperand(&type0); 94 auto inputToInputWeights = model->addOperand(&type1); 95 auto inputToForgetWeights = model->addOperand(&type1); 96 auto inputToCellWeights = model->addOperand(&type1); 97 auto inputToOutputWeights = model->addOperand(&type1); 98 auto recurrentToInputWeights = model->addOperand(&type2); 99 auto recurrentToForgetWeights = model->addOperand(&type2); 100 auto recurrentToCellWeights = model->addOperand(&type2); 101 auto recurrentToOutputWeights = model->addOperand(&type2); 102 auto inputGateBias = model->addOperand(&type3); 103 auto forgetGateBias = model->addOperand(&type3); 104 auto cellGateBias = model->addOperand(&type3); 105 auto outputGateBias = model->addOperand(&type3); 106 auto prevCellState = model->addOperand(&type4); 107 auto prevOutput = model->addOperand(&type5); 108 auto cellStateOut = model->addOperand(&type9); 109 auto output = model->addOperand(&type10); 110 // Phase 2, operations 111 model->addOperation(ANEURALNETWORKS_QUANTIZED_16BIT_LSTM, {input, inputToInputWeights, inputToForgetWeights, inputToCellWeights, inputToOutputWeights, recurrentToInputWeights, recurrentToForgetWeights, recurrentToCellWeights, recurrentToOutputWeights, inputGateBias, forgetGateBias, cellGateBias, outputGateBias, prevCellState, prevOutput}, {cellStateOut, output}); 112 // Phase 3, inputs and outputs 113 model->identifyInputsAndOutputs( 114 {input, inputToInputWeights, inputToForgetWeights, inputToCellWeights, inputToOutputWeights, recurrentToInputWeights, recurrentToForgetWeights, recurrentToCellWeights, recurrentToOutputWeights, inputGateBias, forgetGateBias, cellGateBias, outputGateBias, prevCellState, prevOutput}, 115 {cellStateOut, output}); 116 assert(model->isValid()); 117 } 118 119 inline bool is_ignored_dynamic_output_shape(int i) { 120 static std::set<int> ignore = {}; 121 return ignore.find(i) != ignore.end(); 122 } 123 124 void CreateModel_dynamic_output_shape_relaxed(Model *model) { 125 OperandType type0(Type::TENSOR_QUANT8_ASYMM, {2, 2}, 0.0078125f, 128); 126 OperandType type1(Type::TENSOR_QUANT8_ASYMM, {4, 2}, 0.00408021f, 100); 127 OperandType type10(Type::TENSOR_QUANT8_ASYMM, {0, 0}, 0.0078125f, 128); 128 OperandType type2(Type::TENSOR_QUANT8_ASYMM, {4, 4}, 0.00408021f, 100); 129 OperandType type3(Type::TENSOR_INT32, {4}, 3.1876640625e-05f, 0); 130 OperandType type4(Type::TENSOR_QUANT16_SYMM, {2, 4}, 0.00048828125f, 0); 131 OperandType type5(Type::TENSOR_QUANT8_ASYMM, {2, 4}, 0.0078125f, 128); 132 OperandType type9(Type::TENSOR_QUANT16_SYMM, {0, 0}, 0.00048828125f, 0); 133 // Phase 1, operands 134 auto input = model->addOperand(&type0); 135 auto inputToInputWeights = model->addOperand(&type1); 136 auto inputToForgetWeights = model->addOperand(&type1); 137 auto inputToCellWeights = model->addOperand(&type1); 138 auto inputToOutputWeights = model->addOperand(&type1); 139 auto recurrentToInputWeights = model->addOperand(&type2); 140 auto recurrentToForgetWeights = model->addOperand(&type2); 141 auto recurrentToCellWeights = model->addOperand(&type2); 142 auto recurrentToOutputWeights = model->addOperand(&type2); 143 auto inputGateBias = model->addOperand(&type3); 144 auto forgetGateBias = model->addOperand(&type3); 145 auto cellGateBias = model->addOperand(&type3); 146 auto outputGateBias = model->addOperand(&type3); 147 auto prevCellState = model->addOperand(&type4); 148 auto prevOutput = model->addOperand(&type5); 149 auto cellStateOut = model->addOperand(&type9); 150 auto output = model->addOperand(&type10); 151 // Phase 2, operations 152 model->addOperation(ANEURALNETWORKS_QUANTIZED_16BIT_LSTM, {input, inputToInputWeights, inputToForgetWeights, inputToCellWeights, inputToOutputWeights, recurrentToInputWeights, recurrentToForgetWeights, recurrentToCellWeights, recurrentToOutputWeights, inputGateBias, forgetGateBias, cellGateBias, outputGateBias, prevCellState, prevOutput}, {cellStateOut, output}); 153 // Phase 3, inputs and outputs 154 model->identifyInputsAndOutputs( 155 {input, inputToInputWeights, inputToForgetWeights, inputToCellWeights, inputToOutputWeights, recurrentToInputWeights, recurrentToForgetWeights, recurrentToCellWeights, recurrentToOutputWeights, inputGateBias, forgetGateBias, cellGateBias, outputGateBias, prevCellState, prevOutput}, 156 {cellStateOut, output}); 157 // Phase 4: set relaxed execution 158 model->relaxComputationFloat32toFloat16(true); 159 assert(model->isValid()); 160 } 161 162 inline bool is_ignored_dynamic_output_shape_relaxed(int i) { 163 static std::set<int> ignore = {}; 164 return ignore.find(i) != ignore.end(); 165 } 166 167 void CreateModel_2(Model *model) { 168 OperandType type1(Type::TENSOR_QUANT8_ASYMM, {4, 2}, 0.00408021f, 100); 169 OperandType type2(Type::TENSOR_QUANT8_ASYMM, {4, 4}, 0.00408021f, 100); 170 OperandType type3(Type::TENSOR_INT32, {4}, 3.1876640625e-05f, 0); 171 OperandType type6(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.0078125f, 128); 172 OperandType type7(Type::TENSOR_QUANT16_SYMM, {1, 4}, 0.00048828125f, 0); 173 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 4}, 0.0078125f, 128); 174 // Phase 1, operands 175 auto input1 = model->addOperand(&type6); 176 auto inputToInputWeights1 = model->addOperand(&type1); 177 auto inputToForgetWeights1 = model->addOperand(&type1); 178 auto inputToCellWeights1 = model->addOperand(&type1); 179 auto inputToOutputWeights1 = model->addOperand(&type1); 180 auto recurrentToInputWeights1 = model->addOperand(&type2); 181 auto recurrentToForgetWeights1 = model->addOperand(&type2); 182 auto recurrentToCellWeights1 = model->addOperand(&type2); 183 auto recurrentToOutputWeights1 = model->addOperand(&type2); 184 auto inputGateBias1 = model->addOperand(&type3); 185 auto forgetGateBias1 = model->addOperand(&type3); 186 auto cellGateBias1 = model->addOperand(&type3); 187 auto outputGateBias1 = model->addOperand(&type3); 188 auto prevCellState1 = model->addOperand(&type7); 189 auto prevOutput1 = model->addOperand(&type8); 190 auto cellStateOut1 = model->addOperand(&type7); 191 auto output1 = model->addOperand(&type8); 192 // Phase 2, operations 193 static uint8_t inputToInputWeights1_init[] = {146, 250, 235, 171, 10, 218, 171, 108}; 194 model->setOperandValue(inputToInputWeights1, inputToInputWeights1_init, sizeof(uint8_t) * 8); 195 static uint8_t inputToForgetWeights1_init[] = {24, 50, 132, 179, 158, 110, 3, 169}; 196 model->setOperandValue(inputToForgetWeights1, inputToForgetWeights1_init, sizeof(uint8_t) * 8); 197 static uint8_t inputToCellWeights1_init[] = {133, 34, 29, 49, 206, 109, 54, 183}; 198 model->setOperandValue(inputToCellWeights1, inputToCellWeights1_init, sizeof(uint8_t) * 8); 199 static uint8_t inputToOutputWeights1_init[] = {195, 187, 11, 99, 109, 10, 218, 48}; 200 model->setOperandValue(inputToOutputWeights1, inputToOutputWeights1_init, sizeof(uint8_t) * 8); 201 static uint8_t recurrentToInputWeights1_init[] = {254, 206, 77, 168, 71, 20, 215, 6, 223, 7, 118, 225, 59, 130, 174, 26}; 202 model->setOperandValue(recurrentToInputWeights1, recurrentToInputWeights1_init, sizeof(uint8_t) * 16); 203 static uint8_t recurrentToForgetWeights1_init[] = {137, 240, 103, 52, 68, 51, 237, 112, 0, 220, 89, 23, 69, 4, 207, 253}; 204 model->setOperandValue(recurrentToForgetWeights1, recurrentToForgetWeights1_init, sizeof(uint8_t) * 16); 205 static uint8_t recurrentToCellWeights1_init[] = {172, 60, 205, 65, 14, 0, 140, 168, 240, 223, 133, 56, 142, 64, 246, 216}; 206 model->setOperandValue(recurrentToCellWeights1, recurrentToCellWeights1_init, sizeof(uint8_t) * 16); 207 static uint8_t recurrentToOutputWeights1_init[] = {106, 214, 67, 23, 59, 158, 45, 3, 119, 132, 49, 205, 129, 218, 11, 98}; 208 model->setOperandValue(recurrentToOutputWeights1, recurrentToOutputWeights1_init, sizeof(uint8_t) * 16); 209 static int32_t inputGateBias1_init[] = {-7876, 13488, -726, 32839}; 210 model->setOperandValue(inputGateBias1, inputGateBias1_init, sizeof(int32_t) * 4); 211 static int32_t forgetGateBias1_init[] = {9206, -46884, -11693, -38724}; 212 model->setOperandValue(forgetGateBias1, forgetGateBias1_init, sizeof(int32_t) * 4); 213 static int32_t cellGateBias1_init[] = {39481, 48624, 48976, -21419}; 214 model->setOperandValue(cellGateBias1, cellGateBias1_init, sizeof(int32_t) * 4); 215 static int32_t outputGateBias1_init[] = {-58999, -17050, -41852, -40538}; 216 model->setOperandValue(outputGateBias1, outputGateBias1_init, sizeof(int32_t) * 4); 217 model->addOperation(ANEURALNETWORKS_QUANTIZED_16BIT_LSTM, {input1, inputToInputWeights1, inputToForgetWeights1, inputToCellWeights1, inputToOutputWeights1, recurrentToInputWeights1, recurrentToForgetWeights1, recurrentToCellWeights1, recurrentToOutputWeights1, inputGateBias1, forgetGateBias1, cellGateBias1, outputGateBias1, prevCellState1, prevOutput1}, {cellStateOut1, output1}); 218 // Phase 3, inputs and outputs 219 model->identifyInputsAndOutputs( 220 {input1, prevCellState1, prevOutput1}, 221 {cellStateOut1, output1}); 222 assert(model->isValid()); 223 } 224 225 inline bool is_ignored_2(int i) { 226 static std::set<int> ignore = {}; 227 return ignore.find(i) != ignore.end(); 228 } 229 230 void CreateModel_relaxed_2(Model *model) { 231 OperandType type1(Type::TENSOR_QUANT8_ASYMM, {4, 2}, 0.00408021f, 100); 232 OperandType type2(Type::TENSOR_QUANT8_ASYMM, {4, 4}, 0.00408021f, 100); 233 OperandType type3(Type::TENSOR_INT32, {4}, 3.1876640625e-05f, 0); 234 OperandType type6(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.0078125f, 128); 235 OperandType type7(Type::TENSOR_QUANT16_SYMM, {1, 4}, 0.00048828125f, 0); 236 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 4}, 0.0078125f, 128); 237 // Phase 1, operands 238 auto input1 = model->addOperand(&type6); 239 auto inputToInputWeights1 = model->addOperand(&type1); 240 auto inputToForgetWeights1 = model->addOperand(&type1); 241 auto inputToCellWeights1 = model->addOperand(&type1); 242 auto inputToOutputWeights1 = model->addOperand(&type1); 243 auto recurrentToInputWeights1 = model->addOperand(&type2); 244 auto recurrentToForgetWeights1 = model->addOperand(&type2); 245 auto recurrentToCellWeights1 = model->addOperand(&type2); 246 auto recurrentToOutputWeights1 = model->addOperand(&type2); 247 auto inputGateBias1 = model->addOperand(&type3); 248 auto forgetGateBias1 = model->addOperand(&type3); 249 auto cellGateBias1 = model->addOperand(&type3); 250 auto outputGateBias1 = model->addOperand(&type3); 251 auto prevCellState1 = model->addOperand(&type7); 252 auto prevOutput1 = model->addOperand(&type8); 253 auto cellStateOut1 = model->addOperand(&type7); 254 auto output1 = model->addOperand(&type8); 255 // Phase 2, operations 256 static uint8_t inputToInputWeights1_init[] = {146, 250, 235, 171, 10, 218, 171, 108}; 257 model->setOperandValue(inputToInputWeights1, inputToInputWeights1_init, sizeof(uint8_t) * 8); 258 static uint8_t inputToForgetWeights1_init[] = {24, 50, 132, 179, 158, 110, 3, 169}; 259 model->setOperandValue(inputToForgetWeights1, inputToForgetWeights1_init, sizeof(uint8_t) * 8); 260 static uint8_t inputToCellWeights1_init[] = {133, 34, 29, 49, 206, 109, 54, 183}; 261 model->setOperandValue(inputToCellWeights1, inputToCellWeights1_init, sizeof(uint8_t) * 8); 262 static uint8_t inputToOutputWeights1_init[] = {195, 187, 11, 99, 109, 10, 218, 48}; 263 model->setOperandValue(inputToOutputWeights1, inputToOutputWeights1_init, sizeof(uint8_t) * 8); 264 static uint8_t recurrentToInputWeights1_init[] = {254, 206, 77, 168, 71, 20, 215, 6, 223, 7, 118, 225, 59, 130, 174, 26}; 265 model->setOperandValue(recurrentToInputWeights1, recurrentToInputWeights1_init, sizeof(uint8_t) * 16); 266 static uint8_t recurrentToForgetWeights1_init[] = {137, 240, 103, 52, 68, 51, 237, 112, 0, 220, 89, 23, 69, 4, 207, 253}; 267 model->setOperandValue(recurrentToForgetWeights1, recurrentToForgetWeights1_init, sizeof(uint8_t) * 16); 268 static uint8_t recurrentToCellWeights1_init[] = {172, 60, 205, 65, 14, 0, 140, 168, 240, 223, 133, 56, 142, 64, 246, 216}; 269 model->setOperandValue(recurrentToCellWeights1, recurrentToCellWeights1_init, sizeof(uint8_t) * 16); 270 static uint8_t recurrentToOutputWeights1_init[] = {106, 214, 67, 23, 59, 158, 45, 3, 119, 132, 49, 205, 129, 218, 11, 98}; 271 model->setOperandValue(recurrentToOutputWeights1, recurrentToOutputWeights1_init, sizeof(uint8_t) * 16); 272 static int32_t inputGateBias1_init[] = {-7876, 13488, -726, 32839}; 273 model->setOperandValue(inputGateBias1, inputGateBias1_init, sizeof(int32_t) * 4); 274 static int32_t forgetGateBias1_init[] = {9206, -46884, -11693, -38724}; 275 model->setOperandValue(forgetGateBias1, forgetGateBias1_init, sizeof(int32_t) * 4); 276 static int32_t cellGateBias1_init[] = {39481, 48624, 48976, -21419}; 277 model->setOperandValue(cellGateBias1, cellGateBias1_init, sizeof(int32_t) * 4); 278 static int32_t outputGateBias1_init[] = {-58999, -17050, -41852, -40538}; 279 model->setOperandValue(outputGateBias1, outputGateBias1_init, sizeof(int32_t) * 4); 280 model->addOperation(ANEURALNETWORKS_QUANTIZED_16BIT_LSTM, {input1, inputToInputWeights1, inputToForgetWeights1, inputToCellWeights1, inputToOutputWeights1, recurrentToInputWeights1, recurrentToForgetWeights1, recurrentToCellWeights1, recurrentToOutputWeights1, inputGateBias1, forgetGateBias1, cellGateBias1, outputGateBias1, prevCellState1, prevOutput1}, {cellStateOut1, output1}); 281 // Phase 3, inputs and outputs 282 model->identifyInputsAndOutputs( 283 {input1, prevCellState1, prevOutput1}, 284 {cellStateOut1, output1}); 285 // Phase 4: set relaxed execution 286 model->relaxComputationFloat32toFloat16(true); 287 assert(model->isValid()); 288 } 289 290 inline bool is_ignored_relaxed_2(int i) { 291 static std::set<int> ignore = {}; 292 return ignore.find(i) != ignore.end(); 293 } 294 295 void CreateModel_dynamic_output_shape_2(Model *model) { 296 OperandType type1(Type::TENSOR_QUANT8_ASYMM, {4, 2}, 0.00408021f, 100); 297 OperandType type10(Type::TENSOR_QUANT8_ASYMM, {0, 0}, 0.0078125f, 128); 298 OperandType type2(Type::TENSOR_QUANT8_ASYMM, {4, 4}, 0.00408021f, 100); 299 OperandType type3(Type::TENSOR_INT32, {4}, 3.1876640625e-05f, 0); 300 OperandType type6(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.0078125f, 128); 301 OperandType type7(Type::TENSOR_QUANT16_SYMM, {1, 4}, 0.00048828125f, 0); 302 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 4}, 0.0078125f, 128); 303 OperandType type9(Type::TENSOR_QUANT16_SYMM, {0, 0}, 0.00048828125f, 0); 304 // Phase 1, operands 305 auto input1 = model->addOperand(&type6); 306 auto inputToInputWeights1 = model->addOperand(&type1); 307 auto inputToForgetWeights1 = model->addOperand(&type1); 308 auto inputToCellWeights1 = model->addOperand(&type1); 309 auto inputToOutputWeights1 = model->addOperand(&type1); 310 auto recurrentToInputWeights1 = model->addOperand(&type2); 311 auto recurrentToForgetWeights1 = model->addOperand(&type2); 312 auto recurrentToCellWeights1 = model->addOperand(&type2); 313 auto recurrentToOutputWeights1 = model->addOperand(&type2); 314 auto inputGateBias1 = model->addOperand(&type3); 315 auto forgetGateBias1 = model->addOperand(&type3); 316 auto cellGateBias1 = model->addOperand(&type3); 317 auto outputGateBias1 = model->addOperand(&type3); 318 auto prevCellState1 = model->addOperand(&type7); 319 auto prevOutput1 = model->addOperand(&type8); 320 auto cellStateOut1 = model->addOperand(&type9); 321 auto output1 = model->addOperand(&type10); 322 // Phase 2, operations 323 static uint8_t inputToInputWeights1_init[] = {146, 250, 235, 171, 10, 218, 171, 108}; 324 model->setOperandValue(inputToInputWeights1, inputToInputWeights1_init, sizeof(uint8_t) * 8); 325 static uint8_t inputToForgetWeights1_init[] = {24, 50, 132, 179, 158, 110, 3, 169}; 326 model->setOperandValue(inputToForgetWeights1, inputToForgetWeights1_init, sizeof(uint8_t) * 8); 327 static uint8_t inputToCellWeights1_init[] = {133, 34, 29, 49, 206, 109, 54, 183}; 328 model->setOperandValue(inputToCellWeights1, inputToCellWeights1_init, sizeof(uint8_t) * 8); 329 static uint8_t inputToOutputWeights1_init[] = {195, 187, 11, 99, 109, 10, 218, 48}; 330 model->setOperandValue(inputToOutputWeights1, inputToOutputWeights1_init, sizeof(uint8_t) * 8); 331 static uint8_t recurrentToInputWeights1_init[] = {254, 206, 77, 168, 71, 20, 215, 6, 223, 7, 118, 225, 59, 130, 174, 26}; 332 model->setOperandValue(recurrentToInputWeights1, recurrentToInputWeights1_init, sizeof(uint8_t) * 16); 333 static uint8_t recurrentToForgetWeights1_init[] = {137, 240, 103, 52, 68, 51, 237, 112, 0, 220, 89, 23, 69, 4, 207, 253}; 334 model->setOperandValue(recurrentToForgetWeights1, recurrentToForgetWeights1_init, sizeof(uint8_t) * 16); 335 static uint8_t recurrentToCellWeights1_init[] = {172, 60, 205, 65, 14, 0, 140, 168, 240, 223, 133, 56, 142, 64, 246, 216}; 336 model->setOperandValue(recurrentToCellWeights1, recurrentToCellWeights1_init, sizeof(uint8_t) * 16); 337 static uint8_t recurrentToOutputWeights1_init[] = {106, 214, 67, 23, 59, 158, 45, 3, 119, 132, 49, 205, 129, 218, 11, 98}; 338 model->setOperandValue(recurrentToOutputWeights1, recurrentToOutputWeights1_init, sizeof(uint8_t) * 16); 339 static int32_t inputGateBias1_init[] = {-7876, 13488, -726, 32839}; 340 model->setOperandValue(inputGateBias1, inputGateBias1_init, sizeof(int32_t) * 4); 341 static int32_t forgetGateBias1_init[] = {9206, -46884, -11693, -38724}; 342 model->setOperandValue(forgetGateBias1, forgetGateBias1_init, sizeof(int32_t) * 4); 343 static int32_t cellGateBias1_init[] = {39481, 48624, 48976, -21419}; 344 model->setOperandValue(cellGateBias1, cellGateBias1_init, sizeof(int32_t) * 4); 345 static int32_t outputGateBias1_init[] = {-58999, -17050, -41852, -40538}; 346 model->setOperandValue(outputGateBias1, outputGateBias1_init, sizeof(int32_t) * 4); 347 model->addOperation(ANEURALNETWORKS_QUANTIZED_16BIT_LSTM, {input1, inputToInputWeights1, inputToForgetWeights1, inputToCellWeights1, inputToOutputWeights1, recurrentToInputWeights1, recurrentToForgetWeights1, recurrentToCellWeights1, recurrentToOutputWeights1, inputGateBias1, forgetGateBias1, cellGateBias1, outputGateBias1, prevCellState1, prevOutput1}, {cellStateOut1, output1}); 348 // Phase 3, inputs and outputs 349 model->identifyInputsAndOutputs( 350 {input1, prevCellState1, prevOutput1}, 351 {cellStateOut1, output1}); 352 assert(model->isValid()); 353 } 354 355 inline bool is_ignored_dynamic_output_shape_2(int i) { 356 static std::set<int> ignore = {}; 357 return ignore.find(i) != ignore.end(); 358 } 359 360 void CreateModel_dynamic_output_shape_relaxed_2(Model *model) { 361 OperandType type1(Type::TENSOR_QUANT8_ASYMM, {4, 2}, 0.00408021f, 100); 362 OperandType type10(Type::TENSOR_QUANT8_ASYMM, {0, 0}, 0.0078125f, 128); 363 OperandType type2(Type::TENSOR_QUANT8_ASYMM, {4, 4}, 0.00408021f, 100); 364 OperandType type3(Type::TENSOR_INT32, {4}, 3.1876640625e-05f, 0); 365 OperandType type6(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.0078125f, 128); 366 OperandType type7(Type::TENSOR_QUANT16_SYMM, {1, 4}, 0.00048828125f, 0); 367 OperandType type8(Type::TENSOR_QUANT8_ASYMM, {1, 4}, 0.0078125f, 128); 368 OperandType type9(Type::TENSOR_QUANT16_SYMM, {0, 0}, 0.00048828125f, 0); 369 // Phase 1, operands 370 auto input1 = model->addOperand(&type6); 371 auto inputToInputWeights1 = model->addOperand(&type1); 372 auto inputToForgetWeights1 = model->addOperand(&type1); 373 auto inputToCellWeights1 = model->addOperand(&type1); 374 auto inputToOutputWeights1 = model->addOperand(&type1); 375 auto recurrentToInputWeights1 = model->addOperand(&type2); 376 auto recurrentToForgetWeights1 = model->addOperand(&type2); 377 auto recurrentToCellWeights1 = model->addOperand(&type2); 378 auto recurrentToOutputWeights1 = model->addOperand(&type2); 379 auto inputGateBias1 = model->addOperand(&type3); 380 auto forgetGateBias1 = model->addOperand(&type3); 381 auto cellGateBias1 = model->addOperand(&type3); 382 auto outputGateBias1 = model->addOperand(&type3); 383 auto prevCellState1 = model->addOperand(&type7); 384 auto prevOutput1 = model->addOperand(&type8); 385 auto cellStateOut1 = model->addOperand(&type9); 386 auto output1 = model->addOperand(&type10); 387 // Phase 2, operations 388 static uint8_t inputToInputWeights1_init[] = {146, 250, 235, 171, 10, 218, 171, 108}; 389 model->setOperandValue(inputToInputWeights1, inputToInputWeights1_init, sizeof(uint8_t) * 8); 390 static uint8_t inputToForgetWeights1_init[] = {24, 50, 132, 179, 158, 110, 3, 169}; 391 model->setOperandValue(inputToForgetWeights1, inputToForgetWeights1_init, sizeof(uint8_t) * 8); 392 static uint8_t inputToCellWeights1_init[] = {133, 34, 29, 49, 206, 109, 54, 183}; 393 model->setOperandValue(inputToCellWeights1, inputToCellWeights1_init, sizeof(uint8_t) * 8); 394 static uint8_t inputToOutputWeights1_init[] = {195, 187, 11, 99, 109, 10, 218, 48}; 395 model->setOperandValue(inputToOutputWeights1, inputToOutputWeights1_init, sizeof(uint8_t) * 8); 396 static uint8_t recurrentToInputWeights1_init[] = {254, 206, 77, 168, 71, 20, 215, 6, 223, 7, 118, 225, 59, 130, 174, 26}; 397 model->setOperandValue(recurrentToInputWeights1, recurrentToInputWeights1_init, sizeof(uint8_t) * 16); 398 static uint8_t recurrentToForgetWeights1_init[] = {137, 240, 103, 52, 68, 51, 237, 112, 0, 220, 89, 23, 69, 4, 207, 253}; 399 model->setOperandValue(recurrentToForgetWeights1, recurrentToForgetWeights1_init, sizeof(uint8_t) * 16); 400 static uint8_t recurrentToCellWeights1_init[] = {172, 60, 205, 65, 14, 0, 140, 168, 240, 223, 133, 56, 142, 64, 246, 216}; 401 model->setOperandValue(recurrentToCellWeights1, recurrentToCellWeights1_init, sizeof(uint8_t) * 16); 402 static uint8_t recurrentToOutputWeights1_init[] = {106, 214, 67, 23, 59, 158, 45, 3, 119, 132, 49, 205, 129, 218, 11, 98}; 403 model->setOperandValue(recurrentToOutputWeights1, recurrentToOutputWeights1_init, sizeof(uint8_t) * 16); 404 static int32_t inputGateBias1_init[] = {-7876, 13488, -726, 32839}; 405 model->setOperandValue(inputGateBias1, inputGateBias1_init, sizeof(int32_t) * 4); 406 static int32_t forgetGateBias1_init[] = {9206, -46884, -11693, -38724}; 407 model->setOperandValue(forgetGateBias1, forgetGateBias1_init, sizeof(int32_t) * 4); 408 static int32_t cellGateBias1_init[] = {39481, 48624, 48976, -21419}; 409 model->setOperandValue(cellGateBias1, cellGateBias1_init, sizeof(int32_t) * 4); 410 static int32_t outputGateBias1_init[] = {-58999, -17050, -41852, -40538}; 411 model->setOperandValue(outputGateBias1, outputGateBias1_init, sizeof(int32_t) * 4); 412 model->addOperation(ANEURALNETWORKS_QUANTIZED_16BIT_LSTM, {input1, inputToInputWeights1, inputToForgetWeights1, inputToCellWeights1, inputToOutputWeights1, recurrentToInputWeights1, recurrentToForgetWeights1, recurrentToCellWeights1, recurrentToOutputWeights1, inputGateBias1, forgetGateBias1, cellGateBias1, outputGateBias1, prevCellState1, prevOutput1}, {cellStateOut1, output1}); 413 // Phase 3, inputs and outputs 414 model->identifyInputsAndOutputs( 415 {input1, prevCellState1, prevOutput1}, 416 {cellStateOut1, output1}); 417 // Phase 4: set relaxed execution 418 model->relaxComputationFloat32toFloat16(true); 419 assert(model->isValid()); 420 } 421 422 inline bool is_ignored_dynamic_output_shape_relaxed_2(int i) { 423 static std::set<int> ignore = {}; 424 return ignore.find(i) != ignore.end(); 425 } 426 427