Soft backend: add absent dimension in shape (#981)
authorEfimov Alexander/AI Tools Lab/./Samsung Electronics <a.efimov@samsung.com>
Tue, 14 Aug 2018 11:53:25 +0000 (14:53 +0300)
committerSergey Vostokov/AI Tools Lab /SRR/Staff Engineer/삼성전자 <s.vostokov@samsung.com>
Tue, 14 Aug 2018 11:53:25 +0000 (14:53 +0300)
Add dimension in shape on deserialization (if there are 3 instead of 4)
this is batch dimension - 1 for inference

Signed-off-by: Efimov Alexander <a.efimov@samsung.com>
contrib/nnc/libs/backend/soft/include/cpp_operations.def
contrib/nnc/libs/backend/soft/include/serializer.h
contrib/nnc/libs/backend/soft/src/serializer.cpp

index 0e73a73..cc07f6b 100644 (file)
@@ -67,8 +67,8 @@ size_t volume(Dims<rank> d)
 Dims<4> shapeToDims(const Shape &s)
 {
   Dims<4> dims;
-  int rank = s.getDims();
-  assert(rank == 4);
+  const int rank = s.getDims();
+  assert(rank >= 1 && rank <= 4);
   int stride = 1;
   for (int i = 0; i < rank; ++i)
   {
@@ -76,6 +76,11 @@ Dims<4> shapeToDims(const Shape &s)
     dims.strides[i] = stride;
     stride *= s[rank - 1 - i];
   }
+  for (int i = rank; i < 4; ++i)
+  {
+    dims.sizes[i] = 1;
+    dims.strides[i] = stride;
+  }
   return dims;
 }
 
index b704772..7891524 100644 (file)
@@ -61,7 +61,7 @@ private:
   void serializeShape(const nncc::core::ADT::tensor::Shape &s);
   void serializeTensor(const contrib::core::ADT::TensorVariant &t);
   template <class Op>
-  void serializePads(const Op &op, uint32_t padsRank);
+  void serializePads(const Op &op, int32_t padsRank);
 
   ModelAnalyzer::OpDescr *_curOp;
   const uint32_t _formatVersion = 1;
index dd682f2..cd62eba 100644 (file)
@@ -63,12 +63,12 @@ typename underlying_type<E>::type etoi(E enumVal)
 
 void Serializer::serializeShape(const Shape &s)
 {
-  uint32_t rank = s.rank();
+  int32_t rank = s.rank();
   assert(rank < MAX_DIMS);
   serializeT<char>(s.rank());
-  for (uint32_t i = 0; i < rank; ++i)
+  for (int32_t i = 0; i < rank; ++i)
   {
-    uint32_t dim = s.dim(i);
+    int32_t dim = s.dim(i);
     serializeT(dim);
   }
 }
@@ -97,7 +97,7 @@ void Serializer::serializeTensor(const TensorVariant &t)
 }
 
 template<class Op>
-void Serializer::serializePads(const Op &op, uint32_t padsRank)
+void Serializer::serializePads(const Op &op, int32_t padsRank)
 {
   // serialize padding type
   assert(etoi(op.getPaddingType()) < MAX_ENUM_VAL);