1 //
2 // Copyright © 2017,2022 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #include "SerializeLayerParameters.hpp"
6 #include <armnn/TypesUtils.hpp>
7 #include <string>
8 #include <iostream>
9 #include <sstream>
10
11 namespace armnn
12 {
13
Serialize(ParameterStringifyFunction & fn,const ActivationDescriptor & desc)14 void StringifyLayerParameters<ActivationDescriptor>::Serialize(ParameterStringifyFunction& fn,
15 const ActivationDescriptor& desc)
16 {
17 fn("Function", GetActivationFunctionAsCString(desc.m_Function));
18 fn("A", std::to_string(desc.m_A));
19 fn("B", std::to_string(desc.m_B));
20 }
21
Serialize(ParameterStringifyFunction & fn,const BatchNormalizationDescriptor & desc)22 void StringifyLayerParameters<BatchNormalizationDescriptor>::Serialize(ParameterStringifyFunction& fn,
23 const BatchNormalizationDescriptor& desc)
24 {
25 fn("Eps", std::to_string(desc.m_Eps));
26 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
27 }
28
Serialize(ParameterStringifyFunction & fn,const BatchMatMulDescriptor & desc)29 void StringifyLayerParameters<BatchMatMulDescriptor>::Serialize(ParameterStringifyFunction& fn,
30 const BatchMatMulDescriptor& desc)
31 {
32 fn("TransposeX", (desc.m_TransposeX ? "true" : "false"));
33 fn("TransposeX", (desc.m_TransposeY ? "true" : "false"));
34 fn("AdjointX", (desc.m_AdjointX ? "true" : "false"));
35 fn("AdjointY", (desc.m_AdjointY ? "true" : "false"));
36 }
37
Serialize(ParameterStringifyFunction & fn,const BatchToSpaceNdDescriptor & desc)38 void StringifyLayerParameters<BatchToSpaceNdDescriptor>::Serialize(ParameterStringifyFunction& fn,
39 const BatchToSpaceNdDescriptor& desc)
40 {
41 {
42 std::stringstream ss;
43 int count = 0;
44 for (auto&& var : desc.m_BlockShape)
45 {
46 if (count > 0)
47 {
48 ss << ",";
49 }
50 ss << var;
51 ++count;
52 }
53 fn("BlockShape", ss.str());
54 }
55
56 {
57 std::stringstream ss;
58 int count = 0;
59 for (auto&& var : desc.m_Crops)
60 {
61 if (count > 0)
62 {
63 ss << ",";
64 }
65 ss << "[" << var.first << "," << var.second << "]";
66 ++count;
67 }
68 fn("Crops", ss.str());
69 }
70
71 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
72 }
73
Serialize(ParameterStringifyFunction & fn,const ChannelShuffleDescriptor & desc)74 void StringifyLayerParameters<ChannelShuffleDescriptor>::Serialize(ParameterStringifyFunction& fn,
75 const ChannelShuffleDescriptor& desc)
76 {
77 fn("Axis", std::to_string(desc.m_Axis));
78 fn("NumGroups", std::to_string(desc.m_NumGroups));
79 }
80
Serialize(ParameterStringifyFunction & fn,const ComparisonDescriptor & desc)81 void StringifyLayerParameters<ComparisonDescriptor>::Serialize(ParameterStringifyFunction& fn,
82 const ComparisonDescriptor& desc)
83 {
84 fn("Operation", GetComparisonOperationAsCString(desc.m_Operation));
85 }
86
Serialize(ParameterStringifyFunction & fn,const Convolution2dDescriptor & desc)87 void StringifyLayerParameters<Convolution2dDescriptor>::Serialize(ParameterStringifyFunction& fn,
88 const Convolution2dDescriptor& desc)
89 {
90 {
91 std::stringstream ss;
92 ss << "(" << desc.m_PadTop << "," << desc.m_PadLeft
93 << "," << desc.m_PadBottom << "," << desc.m_PadRight << ")";
94 fn("Padding(T,L,B,R)",ss.str());
95 }
96
97 {
98 std::stringstream ss;
99 ss << "(" << desc.m_StrideX << "," << desc.m_StrideY << ")";
100 fn("Stride(X,Y)", ss.str());
101 }
102
103 {
104 std::stringstream ss;
105 ss << "(" << desc.m_DilationX << "," << desc.m_DilationY << ")";
106 fn("Dilation(X,Y)", ss.str());
107 }
108
109 fn("BiasEnabled",(desc.m_BiasEnabled ? "true" : "false"));
110 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
111 }
112
Serialize(ParameterStringifyFunction & fn,const Convolution3dDescriptor & desc)113 void StringifyLayerParameters<Convolution3dDescriptor>::Serialize(ParameterStringifyFunction& fn,
114 const Convolution3dDescriptor& desc)
115 {
116 {
117 std::stringstream ss;
118 ss << "(" << desc.m_PadTop << "," << desc.m_PadLeft
119 << "," << desc.m_PadBottom << "," << desc.m_PadRight
120 << "," << desc.m_PadFront << "," << desc.m_PadBack << ")";
121 fn("Padding(T,L,B,R,F,B)",ss.str());
122 }
123
124 {
125 std::stringstream ss;
126 ss << "(" << desc.m_StrideX << "," << desc.m_StrideY << "," << desc.m_StrideZ << ")";
127 fn("Stride(X,Y,Z)", ss.str());
128 }
129
130 {
131 std::stringstream ss;
132 ss << "(" << desc.m_DilationX << "," << desc.m_DilationY << "," << desc.m_DilationZ << ")";
133 fn("Dilation(X,Y,Z)", ss.str());
134 }
135
136 fn("BiasEnabled",(desc.m_BiasEnabled ? "true" : "false"));
137 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
138 }
139
Serialize(ParameterStringifyFunction & fn,const DetectionPostProcessDescriptor & desc)140 void StringifyLayerParameters<DetectionPostProcessDescriptor>::Serialize(ParameterStringifyFunction& fn,
141 const DetectionPostProcessDescriptor& desc)
142 {
143 fn("MaxDetections", std::to_string(desc.m_MaxDetections));
144 fn("MaxClassesPerDetection", std::to_string(desc.m_MaxClassesPerDetection));
145 fn("DetectionsPerClass", std::to_string(desc.m_DetectionsPerClass));
146 fn("NmsScoreThreshold", std::to_string(desc.m_NmsScoreThreshold));
147 fn("NmsIouThreshold", std::to_string(desc.m_NmsIouThreshold));
148 fn("NumClasses", std::to_string(desc.m_NumClasses));
149 fn("UseRegularNms", (desc.m_UseRegularNms ? "true" : "false"));
150 {
151 std::stringstream ss;
152 ss << "(" << desc.m_ScaleX << "," << desc.m_ScaleY << ")";
153 fn("Scale(X,Y)", ss.str());
154 }
155
156 {
157 std::stringstream ss;
158 ss << "(" << desc.m_ScaleW << "," << desc.m_ScaleH << ")";
159 fn("Scale(W,H)", ss.str());
160 }
161 }
162
Serialize(ParameterStringifyFunction & fn,const DepthwiseConvolution2dDescriptor & desc)163 void StringifyLayerParameters<DepthwiseConvolution2dDescriptor>::Serialize(
164 ParameterStringifyFunction& fn,
165 const DepthwiseConvolution2dDescriptor& desc)
166 {
167 {
168 std::stringstream ss;
169 ss << "(" << desc.m_PadTop << "," << desc.m_PadLeft
170 << "," << desc.m_PadBottom << "," << desc.m_PadRight << ")";
171 fn("Padding(T,L,B,R)",ss.str());
172 }
173
174 {
175 std::stringstream ss;
176 ss << "(" << desc.m_StrideX << "," << desc.m_StrideY << ")";
177 fn("Stride(X,Y)", ss.str());
178 }
179
180 {
181 std::stringstream ss;
182 ss << "(" << desc.m_DilationX << "," << desc.m_DilationY << ")";
183 fn("Dilation(X,Y)", ss.str());
184 }
185
186 fn("BiasEnabled",(desc.m_BiasEnabled ? "true" : "false"));
187 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
188 }
189
Serialize(ParameterStringifyFunction & fn,const ElementwiseUnaryDescriptor & desc)190 void StringifyLayerParameters<ElementwiseUnaryDescriptor>::Serialize(ParameterStringifyFunction& fn,
191 const ElementwiseUnaryDescriptor& desc)
192 {
193 fn("UnaryOperation", GetUnaryOperationAsCString(desc.m_Operation));
194 }
195
Serialize(ParameterStringifyFunction & fn,const FakeQuantizationDescriptor & desc)196 void StringifyLayerParameters<FakeQuantizationDescriptor>::Serialize(ParameterStringifyFunction& fn,
197 const FakeQuantizationDescriptor& desc)
198 {
199 fn("Min", std::to_string(desc.m_Min));
200 fn("Max", std::to_string(desc.m_Max));
201 }
202
Serialize(ParameterStringifyFunction & fn,const FullyConnectedDescriptor & desc)203 void StringifyLayerParameters<FullyConnectedDescriptor>::Serialize(ParameterStringifyFunction& fn,
204 const FullyConnectedDescriptor& desc)
205 {
206 fn("BiasEnabled", (desc.m_BiasEnabled ? "true" : "false"));
207 fn("TransposeWeightMatrix", (desc.m_TransposeWeightMatrix ? "true" : "false"));
208 }
209
Serialize(ParameterStringifyFunction & fn,const GatherDescriptor & desc)210 void StringifyLayerParameters<GatherDescriptor>::Serialize(ParameterStringifyFunction& fn,
211 const GatherDescriptor& desc)
212 {
213 fn("Axis", std::to_string(desc.m_Axis));
214 }
215
Serialize(ParameterStringifyFunction & fn,const L2NormalizationDescriptor & desc)216 void StringifyLayerParameters<L2NormalizationDescriptor>::Serialize(ParameterStringifyFunction& fn,
217 const L2NormalizationDescriptor& desc)
218 {
219 fn("Eps", std::to_string(desc.m_Eps));
220 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
221 }
222
Serialize(ParameterStringifyFunction & fn,const LstmDescriptor & desc)223 void StringifyLayerParameters<LstmDescriptor>::Serialize(ParameterStringifyFunction& fn, const LstmDescriptor& desc)
224 {
225 fn("ActivationFunc", std::to_string(desc.m_ActivationFunc));
226 fn("ClippingThresCell", std::to_string(desc.m_ClippingThresCell));
227 fn("ClippingThresProj", std::to_string(desc.m_ClippingThresProj));
228 fn("CifgEnabled", (desc.m_CifgEnabled ? "true" : "false")) ;
229 fn("PeepholeEnabled", (desc.m_PeepholeEnabled ? "true" : "false")) ;
230 fn("ProjectionEnabled", (desc.m_ProjectionEnabled ? "true" : "false")) ;
231 fn("LayerNormEnabled", (desc.m_LayerNormEnabled ? "true" : "false"));
232 }
233
Serialize(ParameterStringifyFunction & fn,const MeanDescriptor & desc)234 void StringifyLayerParameters<MeanDescriptor>::Serialize(ParameterStringifyFunction& fn, const MeanDescriptor& desc)
235 {
236 {
237 std::stringstream ss;
238 int count = 0;
239 for (auto&& var : desc.m_Axis)
240 {
241 if (count > 0)
242 {
243 ss << ",";
244 }
245 ss << var;
246 ++count;
247 }
248 fn("Axis", ss.str());
249 }
250 fn("KeepDims", (desc.m_KeepDims ? "true" : "false"));
251 }
252
Serialize(ParameterStringifyFunction & fn,const NormalizationDescriptor & desc)253 void StringifyLayerParameters<NormalizationDescriptor>::Serialize(ParameterStringifyFunction& fn,
254 const NormalizationDescriptor& desc)
255 {
256 fn("NormChannelType", GetNormalizationAlgorithmChannelAsCString(desc.m_NormChannelType));
257 fn("NormMethodType", GetNormalizationAlgorithmMethodAsCString(desc.m_NormMethodType));
258 fn("NormSize", std::to_string(desc.m_NormSize));
259 fn("Alpha", std::to_string(desc.m_Alpha));
260 fn("Beta", std::to_string(desc.m_Beta));
261 fn("K", std::to_string(desc.m_K));
262 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
263 }
264
Serialize(ParameterStringifyFunction & fn,const OriginsDescriptor & desc)265 void StringifyLayerParameters<OriginsDescriptor>::Serialize(ParameterStringifyFunction& fn,
266 const OriginsDescriptor& desc)
267 {
268 fn("ConcatAxis", std::to_string(desc.GetConcatAxis()));
269
270 uint32_t numViews = desc.GetNumViews();
271 uint32_t numDims = desc.GetNumDimensions();
272
273 for (uint32_t view = 0; view < numViews; ++view)
274 {
275 std::stringstream key;
276 key << "MergeTo#" << view;
277 std::stringstream value;
278 value << "[";
279 auto viewData = desc.GetViewOrigin(view);
280
281 for (uint32_t dim = 0; dim < numDims; ++dim)
282 {
283 if (dim > 0)
284 {
285 value << ",";
286 }
287 value << viewData[dim];
288 }
289 value << "]";
290 fn(key.str(), value.str());
291 }
292 }
293
Serialize(ParameterStringifyFunction & fn,const PadDescriptor & desc)294 void StringifyLayerParameters<PadDescriptor>::Serialize(ParameterStringifyFunction& fn, const PadDescriptor& desc)
295 {
296 {
297 std::stringstream ss;
298 int count = 0;
299 for (auto&& var : desc.m_PadList)
300 {
301 if (count > 0)
302 {
303 ss << ",";
304 }
305 ss << "[" << var.first << "," << var.second << "]";
306 ++count;
307 }
308 fn("PadList", ss.str());
309 }
310 fn("PadValue", std::to_string(desc.m_PadValue));
311 fn("PaddingMode", GetPaddingModeAsCString(desc.m_PaddingMode));
312 }
313
Serialize(ParameterStringifyFunction & fn,const PreCompiledDescriptor & desc)314 void StringifyLayerParameters<PreCompiledDescriptor>::Serialize(ParameterStringifyFunction& fn,
315 const PreCompiledDescriptor& desc)
316 {
317 fn("NumInputSlots", std::to_string(desc.m_NumInputSlots));
318 fn("NumOutputSlots", std::to_string(desc.m_NumOutputSlots));
319 }
320
Serialize(ParameterStringifyFunction & fn,const Pooling2dDescriptor & desc)321 void StringifyLayerParameters<Pooling2dDescriptor>::Serialize(ParameterStringifyFunction& fn,
322 const Pooling2dDescriptor& desc)
323 {
324 fn("Type", GetPoolingAlgorithmAsCString(desc.m_PoolType));
325 {
326 std::stringstream ss;
327 ss << "(" << desc.m_PadTop << "," << desc.m_PadLeft
328 << "," << desc.m_PadBottom << "," << desc.m_PadRight << ")";
329 fn("Padding(T,L,B,R)", ss.str());
330 }
331
332 {
333 std::stringstream ss;
334 ss << "(" << desc.m_PoolWidth << "," << desc.m_PoolHeight << ")";
335 fn("(Width,Height)", ss.str());
336 }
337
338 {
339 std::stringstream ss;
340 ss << "(" << desc.m_StrideX << "," << desc.m_StrideY << ")";
341 fn("Stride(X,Y)", ss.str());
342 }
343
344 fn("OutputShapeRounding", GetOutputShapeRoundingAsCString(desc.m_OutputShapeRounding));
345 fn("PaddingMethod", GetPaddingMethodAsCString(desc.m_PaddingMethod));
346 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
347 }
348
Serialize(ParameterStringifyFunction & fn,const Pooling3dDescriptor & desc)349 void StringifyLayerParameters<Pooling3dDescriptor>::Serialize(ParameterStringifyFunction& fn,
350 const Pooling3dDescriptor& desc)
351 {
352 fn("Type", GetPoolingAlgorithmAsCString(desc.m_PoolType));
353 {
354 std::stringstream ss;
355 ss << "(" << desc.m_PadTop << "," << desc.m_PadLeft
356 << "," << desc.m_PadBottom << "," << desc.m_PadRight
357 << "," << desc.m_PadFront << "," << desc.m_PadBack << ")";
358 fn("Padding(T,L,B,R,F,B)", ss.str());
359 }
360
361 {
362 std::stringstream ss;
363 ss << "(" << desc.m_PoolWidth << "," << desc.m_PoolHeight << "," << desc.m_PoolDepth << ")";
364 fn("(Width,Height,Depth)", ss.str());
365 }
366
367 {
368 std::stringstream ss;
369 ss << "(" << desc.m_StrideX << "," << desc.m_StrideY << "," << desc.m_StrideZ << ")";
370 fn("Stride(X,Y,Z)", ss.str());
371 }
372
373 fn("OutputShapeRounding", GetOutputShapeRoundingAsCString(desc.m_OutputShapeRounding));
374 fn("PaddingMethod", GetPaddingMethodAsCString(desc.m_PaddingMethod));
375 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
376 }
377
Serialize(ParameterStringifyFunction & fn,const PermuteDescriptor & desc)378 void StringifyLayerParameters<PermuteDescriptor>::Serialize(ParameterStringifyFunction& fn,
379 const PermuteDescriptor& desc)
380 {
381 std::stringstream ss;
382 ss << "[";
383 bool addComma = false;
384 for (auto it : desc.m_DimMappings)
385 {
386 if (addComma)
387 {
388 ss << ",";
389 }
390 ss << it;
391 addComma = true;
392 }
393 ss << "]";
394
395 fn("DimMappings",ss.str());
396 }
397
Serialize(ParameterStringifyFunction & fn,const ReduceDescriptor & desc)398 void StringifyLayerParameters<ReduceDescriptor>::Serialize(ParameterStringifyFunction& fn, const ReduceDescriptor& desc)
399 {
400 {
401 std::stringstream ss;
402 int count = 0;
403 for (auto&& var : desc.m_vAxis)
404 {
405 if (count > 0)
406 {
407 ss << ",";
408 }
409 ss << var;
410 ++count;
411 }
412 fn("Axis", ss.str());
413 }
414 fn("KeepDims", (desc.m_KeepDims ? "true" : "false"));
415 fn("ReduceOperation", GetReduceOperationAsCString(desc.m_ReduceOperation));
416 }
417
Serialize(ParameterStringifyFunction & fn,const ReshapeDescriptor & desc)418 void StringifyLayerParameters<ReshapeDescriptor>::Serialize(ParameterStringifyFunction& fn,
419 const ReshapeDescriptor& desc)
420 {
421 std::stringstream ss;
422 ss << desc.m_TargetShape;
423 fn("TargetShape",ss.str());
424 }
425
Serialize(ParameterStringifyFunction & fn,const ResizeDescriptor & desc)426 void StringifyLayerParameters<ResizeDescriptor>::Serialize(ParameterStringifyFunction& fn,
427 const ResizeDescriptor& desc)
428 {
429 fn("TargetWidth", std::to_string(desc.m_TargetWidth));
430 fn("TargetHeight", std::to_string(desc.m_TargetHeight));
431 fn("ResizeMethod", GetResizeMethodAsCString(desc.m_Method));
432 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
433 fn("AlignCorners", std::to_string(desc.m_AlignCorners));
434 fn("HalfPixelCenters", std::to_string(desc.m_HalfPixelCenters));
435 }
436
Serialize(ParameterStringifyFunction & fn,const SoftmaxDescriptor & desc)437 void StringifyLayerParameters<SoftmaxDescriptor>::Serialize(ParameterStringifyFunction& fn,
438 const SoftmaxDescriptor& desc)
439 {
440 fn("Beta", std::to_string(desc.m_Beta));
441 fn("Axis", std::to_string(desc.m_Axis));
442 }
443
Serialize(ParameterStringifyFunction & fn,const SpaceToBatchNdDescriptor & desc)444 void StringifyLayerParameters<SpaceToBatchNdDescriptor>::Serialize(ParameterStringifyFunction& fn,
445 const SpaceToBatchNdDescriptor& desc)
446 {
447 {
448 std::stringstream ss;
449 int count = 0;
450 for (auto&& var : desc.m_BlockShape)
451 {
452 if (count > 0)
453 {
454 ss << ",";
455 }
456 ss << var;
457 ++count;
458 }
459 fn("BlockShape", ss.str());
460 }
461
462 {
463 std::stringstream ss;
464 int count = 0;
465 for (auto&& var : desc.m_PadList)
466 {
467 if (count > 0)
468 {
469 ss << ",";
470 }
471 ss << "[" << var.first << "," << var.second << "]";
472 ++count;
473 }
474 fn("PadList", ss.str());
475 }
476
477 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
478 }
479
Serialize(ParameterStringifyFunction & fn,const SpaceToDepthDescriptor & desc)480 void StringifyLayerParameters<SpaceToDepthDescriptor>::Serialize(ParameterStringifyFunction& fn,
481 const SpaceToDepthDescriptor& desc)
482 {
483 fn("BlockSize", std::to_string(desc.m_BlockSize));
484 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
485 }
486
Serialize(ParameterStringifyFunction & fn,const StackDescriptor & desc)487 void StringifyLayerParameters<StackDescriptor>::Serialize(ParameterStringifyFunction& fn, const StackDescriptor& desc)
488 {
489 fn("Axis", std::to_string(desc.m_Axis));
490 fn("NumInputs", std::to_string(desc.m_NumInputs));
491 {
492 std::stringstream ss;
493 ss << desc.m_InputShape;
494 fn("InputShape",ss.str());
495 }
496 }
497
Serialize(ParameterStringifyFunction & fn,const StridedSliceDescriptor & desc)498 void StringifyLayerParameters<StridedSliceDescriptor>::Serialize(ParameterStringifyFunction& fn,
499 const StridedSliceDescriptor& desc)
500 {
501 {
502 std::stringstream ss;
503 int count = 0;
504 for (auto&& var : desc.m_Begin)
505 {
506 if (count > 0)
507 {
508 ss << ",";
509 }
510 ss << var;
511 ++count;
512 }
513 fn("Begin", ss.str());
514 }
515
516 {
517 std::stringstream ss;
518 int count = 0;
519 for (auto&& var : desc.m_End)
520 {
521 if (count > 0)
522 {
523 ss << ",";
524 }
525 ss << var;
526 ++count;
527 }
528 fn("End", ss.str());
529 }
530
531 {
532 std::stringstream ss;
533 int count = 0;
534 for (auto&& var : desc.m_Stride)
535 {
536 if (count > 0)
537 {
538 ss << ",";
539 }
540 ss << var;
541 ++count;
542 }
543 fn("Stride", ss.str());
544 }
545
546 fn("BeginMask", std::to_string(desc.m_BeginMask));
547 fn("EndMask", std::to_string(desc.m_EndMask));
548 fn("ShrinkAxisMask", std::to_string(desc.m_ShrinkAxisMask));
549 fn("EllipsisMask", std::to_string(desc.m_EllipsisMask));
550 fn("NewAxisMask", std::to_string(desc.m_NewAxisMask));
551 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
552 }
553
Serialize(ParameterStringifyFunction & fn,const TransposeConvolution2dDescriptor & desc)554 void StringifyLayerParameters<TransposeConvolution2dDescriptor>::Serialize(
555 ParameterStringifyFunction& fn,
556 const TransposeConvolution2dDescriptor& desc)
557 {
558 {
559 std::stringstream ss;
560 ss << "(" << desc.m_PadTop << "," << desc.m_PadLeft
561 << "," << desc.m_PadBottom << "," << desc.m_PadRight << ")";
562 fn("Padding(T,L,B,R)",ss.str());
563 }
564
565 {
566 std::stringstream ss;
567 ss << "(" << desc.m_StrideX << "," << desc.m_StrideY << ")";
568 fn("Stride(X,Y)", ss.str());
569 }
570
571 fn("BiasEnabled", (desc.m_BiasEnabled ? "true" : "false"));
572 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
573 }
574
Serialize(ParameterStringifyFunction & fn,const TransposeDescriptor & desc)575 void StringifyLayerParameters<TransposeDescriptor>::Serialize(ParameterStringifyFunction& fn,
576 const TransposeDescriptor& desc)
577 {
578 std::stringstream ss;
579 ss << "[";
580 bool addComma = false;
581 for (auto it : desc.m_DimMappings)
582 {
583 if (addComma)
584 {
585 ss << ",";
586 }
587 ss << it;
588 addComma = true;
589 }
590 ss << "]";
591
592 fn("DimMappings",ss.str());
593 }
594
Serialize(ParameterStringifyFunction & fn,const ViewsDescriptor & desc)595 void StringifyLayerParameters<ViewsDescriptor>::Serialize(ParameterStringifyFunction& fn, const ViewsDescriptor& desc)
596 {
597 uint32_t numViews = desc.GetNumViews();
598 uint32_t numDims = desc.GetNumDimensions();
599 for (uint32_t view = 0; view < numViews; ++view) {
600 std::stringstream key;
601 key << "ViewSizes#" << view;
602 std::stringstream value;
603 value << "[";
604 auto viewData = desc.GetViewSizes(view);
605 for (uint32_t dim = 0; dim < numDims; ++dim)
606 {
607 if (dim > 0)
608 {
609 value << ",";
610 }
611 value << viewData[dim];
612 }
613 value << "]";
614 fn(key.str(), value.str());
615 }
616 StringifyLayerParameters<OriginsDescriptor>::Serialize(fn, desc.GetOrigins());
617 }
618
619 } // namespace armnn