[nnc] Do not transpose weights when serializing FullyConnected operation for x86...
authorСергей Баранников/AI Tools Lab /SRR/Engineer/삼성전자 <s.barannikov@samsung.com>
Thu, 20 Dec 2018 17:36:02 +0000 (20:36 +0300)
committerРоман Михайлович Русяев/AI Tools Lab /SRR/Staff Engineer/삼성전자 <r.rusyaev@samsung.com>
Thu, 20 Dec 2018 17:36:02 +0000 (20:36 +0300)
Remove call to transposeTensor<1, 0> when serializing weights tensor for FullyConnected op for x86-cpp backend.

Signed-off-by: Sergei Barannikov <s.barannikov@samsung.com>
contrib/nnc/passes/soft_backend/SBSerializer.cpp
contrib/nnc/passes/soft_backend/code_snippets/cpp_fully_connected.def
contrib/nnc/unittests/soft_backend/CPPOperations.cpp

index fb4d371..9eeace8 100644 (file)
@@ -215,7 +215,7 @@ void Serializer::visit(ops::PoolOp& op) {
 
 void Serializer::visit(ops::FullyConnectedOp& op) {
   _curOp->_paramStartOffset = _buffer.size();
-  serializeTensor(transposeTensor<1, 0>(op.getWeights()));
+  serializeTensor(op.getWeights());
   serializeShape(op.getOutputShape(0));
 }
 
index 2690896..22b1c3b 100644 (file)
@@ -14,16 +14,14 @@ limitations under the License.
 ==============================================================================*/
 
 inline void FullyConnected(const float* input_data, const Dims<4>& input_dims,
-                           const float* weights_data,
-                           const Dims<4>& weights_dims,
+                           const float* weights_data, const Dims<4>& weights_dims,
                            float* output_data, const Dims<4>& output_dims) {
-  const int input_rows = ArraySize(weights_dims, 0);
   const auto input_matrix_map =
-      MapAsMatrixWithGivenNumberOfRows(input_data, input_dims, input_rows);
+      MapAsMatrixWithFirstDimAsRows(input_data, input_dims);
   const auto filter_matrix_map =
       MapAsMatrixWithFirstDimAsRows(weights_data, weights_dims);
   auto output_matrix_map =
       MapAsMatrixWithFirstDimAsRows(output_data, output_dims);
 
-  Gemm(filter_matrix_map.transpose(), input_matrix_map, &output_matrix_map);
+  Gemm(filter_matrix_map, input_matrix_map, &output_matrix_map);
 }
index 099d774..35938bc 100644 (file)
@@ -645,12 +645,12 @@ TEST(cpp_operations_test, depthwise_conv) {
 }
 
 TEST(cpp_operations_test, fully_connected) {
-  vector<int> input_shape_data{1, 13};
-  mir::Shape weightsShape{13, 7};
+  vector<int> input_shape_data{3, 13};
+  mir::Shape weights_shape{13, 7};
   vector<unique_ptr<mir::TensorVariant>> input_ntensors(1);
   Tensor input_atensor;
   fillTensors(input_ntensors[0], input_atensor, input_shape_data, 1.0f);
-  mir::TensorVariant weights = createNTensor(weightsShape, 1.0f);
+  mir::TensorVariant weights = createNTensor(weights_shape, 1.0f);
   auto op_generator = [weights](mir::Graph& g, const std::vector<mir::IODescriptor>& inputs) {
     return g.create<mir::ops::FullyConnectedOp>("y", inputs[0], weights);
   };