[ Layer ] Change OutputLayer to MultiOutLayer
authorjijoong.moon <jijoong.moon@samsung.com>
Wed, 28 Jul 2021 02:41:10 +0000 (11:41 +0900)
committerJijoong Moon <jijoong.moon@samsung.com>
Thu, 29 Jul 2021 04:50:10 +0000 (13:50 +0900)
Currently the feature of OutputLayer is not match. It is more like
Multiout layer. The type name and others are already multiout.

This commit includes,
  . Class name changed : OutputLayer --> MultiOutLayer
  . File name changed : output_layer.x --> multiout_layer.x

**Self evaluation:**
1. Build test:  [X]Passed [ ]Failed [ ]Skipped
2. Run test:  [X]Passed [ ]Failed [ ]Skipped

Signed-off-by: jijoong.moon <jijoong.moon@samsung.com>
jni/Android.mk
nntrainer/app_context.cpp
nntrainer/graph/network_graph.cpp
nntrainer/layers/meson.build
nntrainer/layers/multiout_layer.cpp [moved from nntrainer/layers/output_layer.cpp with 81% similarity]
nntrainer/layers/multiout_layer.h [moved from nntrainer/layers/output_layer.h with 70% similarity]
test/unittest/datasets/data_producer_common_tests.cpp
test/unittest/layers/unittest_layers_multiout.cpp
test/unittest/unittest_nntrainer_modelfile.cpp
test/unittest/unittest_nntrainer_models.cpp

index 306a402..4862f35 100644 (file)
@@ -140,7 +140,7 @@ NNTRAINER_SRCS := $(NNTRAINER_ROOT)/nntrainer/models/neuralnet.cpp \
                   $(NNTRAINER_ROOT)/nntrainer/tensor/blas_interface.cpp \
                   $(NNTRAINER_ROOT)/nntrainer/layers/layer_node.cpp \
                   $(NNTRAINER_ROOT)/nntrainer/layers/input_layer.cpp \
-                  $(NNTRAINER_ROOT)/nntrainer/layers/output_layer.cpp \
+                  $(NNTRAINER_ROOT)/nntrainer/layers/multiout_layer.cpp \
                   $(NNTRAINER_ROOT)/nntrainer/layers/fc_layer.cpp \
                   $(NNTRAINER_ROOT)/nntrainer/layers/bn_layer.cpp \
                   $(NNTRAINER_ROOT)/nntrainer/layers/loss/loss_layer.cpp \
index 6916628..f2df9f5 100644 (file)
@@ -43,8 +43,8 @@
 #include <input_layer.h>
 #include <lstm.h>
 #include <mse_loss_layer.h>
+#include <multiout_layer.h>
 #include <nntrainer_error.h>
-#include <output_layer.h>
 #include <parse_util.h>
 #include <permute_layer.h>
 #include <plugged_layer.h>
@@ -222,7 +222,7 @@ static void add_default_object(AppContext &ac) {
                      ActivationLayer::type, LayerType::LAYER_ACTIVATION);
   ac.registerFactory(nntrainer::createLayer<AdditionLayer>, AdditionLayer::type,
                      LayerType::LAYER_ADDITION);
-  ac.registerFactory(nntrainer::createLayer<OutputLayer>, OutputLayer::type,
+  ac.registerFactory(nntrainer::createLayer<MultiOutLayer>, MultiOutLayer::type,
                      LayerType::LAYER_MULTIOUT);
   ac.registerFactory(nntrainer::createLayer<ConcatLayer>, ConcatLayer::type,
                      LayerType::LAYER_CONCAT);
index 7fe3927..39f30b9 100644 (file)
 #include <cross_entropy_softmax_loss_layer.h>
 #include <flatten_layer.h>
 #include <input_layer.h>
+#include <multiout_layer.h>
 #include <network_graph.h>
 #include <nntrainer_error.h>
 #include <nntrainer_log.h>
-#include <output_layer.h>
 #include <parse_util.h>
 #include <profiler.h>
 #include <rnn.h>
@@ -204,7 +204,7 @@ int NetworkGraph::realizeMultiOutputType(
   if (in_node->getNumOutputConnections() <= 1)
     return ML_ERROR_NONE;
 
-  std::shared_ptr<LayerNode> lnode = createLayerNode(OutputLayer::type);
+  std::shared_ptr<LayerNode> lnode = createLayerNode(MultiOutLayer::type);
   graph.ensureName(*lnode, in_node->getName());
 
   lnode->setInputLayers({in_node->getName()});
@@ -398,7 +398,7 @@ int NetworkGraph::realizeGraph() {
    */
   for (unsigned int i = 0; i < graph.size(); ++i) {
     auto const &lnode = LNODE(*(cbegin() + i));
-    if (lnode->getType() != OutputLayer::type &&
+    if (lnode->getType() != MultiOutLayer::type &&
         lnode->getType() != SplitLayer::type) {
       status = realizeMultiOutputType(lnode);
       NN_RETURN_STATUS();
index 498be0f..9624b96 100644 (file)
@@ -5,13 +5,12 @@ layer_sources = [
   'activation_layer.cpp',
   'addition_layer.cpp',
   'concat_layer.cpp',
-  'output_layer.cpp',
   'bn_layer.cpp',
   'conv2d_layer.cpp',
   'fc_layer.cpp',
   'flatten_layer.cpp',
   'input_layer.cpp',
-  'output_layer.cpp',
+  'multiout_layer.cpp',
   'layer_node.cpp',
   'pooling2d_layer.cpp',
   'preprocess_flip_layer.cpp',
similarity index 81%
rename from nntrainer/layers/output_layer.cpp
rename to nntrainer/layers/multiout_layer.cpp
index c720d7b..892b909 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * Copyright (C) 2020 Jijoong Moon <jijoong.moon@samsung.com>
  *
- * @file        output_layer.cpp
+ * @file        multiout_layer.cpp
  * @date        05 Nov 2020
  * @see         https://github.com/nnstreamer/nntrainer
  * @author      Jijoong Moon <jijoong.moon@samsung.com>
@@ -12,9 +12,9 @@
  */
 
 #include <cstring>
+#include <multiout_layer.h>
 #include <nntrainer_error.h>
 #include <nntrainer_log.h>
-#include <output_layer.h>
 #include <parse_util.h>
 #include <util_func.h>
 
@@ -22,7 +22,7 @@ namespace nntrainer {
 
 static constexpr size_t SINGLE_INOUT_IDX = 0;
 
-void OutputLayer::finalize(InitLayerContext &context) {
+void MultiOutLayer::finalize(InitLayerContext &context) {
   std::vector<TensorDim> out_dims(context.getNumOutputs());
   const TensorDim &in_dim = context.getInputDimensions()[0];
 
@@ -30,14 +30,14 @@ void OutputLayer::finalize(InitLayerContext &context) {
   context.setOutputDimensions(out_dims);
 }
 
-void OutputLayer::forwarding(RunLayerContext &context, bool training) {
+void MultiOutLayer::forwarding(RunLayerContext &context, bool training) {
   const Tensor &input_ = context.getInput(SINGLE_INOUT_IDX);
   for (unsigned int idx = 0; idx < context.getNumOutputs(); ++idx) {
     context.getOutput(idx).fill(input_);
   }
 }
 
-void OutputLayer::calcDerivative(RunLayerContext &context) {
+void MultiOutLayer::calcDerivative(RunLayerContext &context) {
   Tensor &ret = context.getOutgoingDerivative(SINGLE_INOUT_IDX);
   for (unsigned int idx = 0; idx < context.getNumOutputs(); ++idx) {
     if (idx == 0) {
@@ -48,7 +48,7 @@ void OutputLayer::calcDerivative(RunLayerContext &context) {
   }
 }
 
-void OutputLayer::setProperty(const std::vector<std::string> &values) {
+void MultiOutLayer::setProperty(const std::vector<std::string> &values) {
   if (!values.empty()) {
     std::string msg = "[FlattenLayer] Unknown Layer Properties count " +
                       std::to_string(values.size());
similarity index 70%
rename from nntrainer/layers/output_layer.h
rename to nntrainer/layers/multiout_layer.h
index 0c63428..cb62b11 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * Copyright (C) 2020 Jijoong Moon <jijoong.moon@samsung.com>
  *
- * @file        output_layer.h
+ * @file        multiout_layer.h
  * @date        05 Nov 2020
  * @see         https://github.com/nnstreamer/nntrainer
  * @author      Jijoong Moon <jijoong.moon@samsung.com>
@@ -12,8 +12,8 @@
  * @todo        Support inplace for this layer
  */
 
-#ifndef __OUTPUT_LAYER_H__
-#define __OUTPUT_LAYER_H__
+#ifndef __MULTIOUT_LAYER_H__
+#define __MULTIOUT_LAYER_H__
 #ifdef __cplusplus
 
 #include <layer_devel.h>
 namespace nntrainer {
 
 /**
- * @class   Output Layer
- * @brief   Output Layer
+ * @class   Multiout Layer
+ * @brief   Multiout Layer
  */
-class OutputLayer : public Layer {
+class MultiOutLayer : public Layer {
 public:
   /**
-   * @brief     Constructor of Output Layer
+   * @brief     Constructor of Multiout Layer
    */
-  OutputLayer() : Layer() {}
+  MultiOutLayer() : Layer() {}
 
   /**
-   * @brief     Destructor of Output Layer
+   * @brief     Destructor of Multiout Layer
    */
-  ~OutputLayer() = default;
+  ~MultiOutLayer() = default;
 
   /**
-   *  @brief  Move constructor of OutputLayer.
-   *  @param[in] OutputLayer &&
+   *  @brief  Move constructor of MultiOutLayer.
+   *  @param[in] MultiOutLayer &&
    */
-  OutputLayer(OutputLayer &&rhs) noexcept = default;
+  MultiOutLayer(MultiOutLayer &&rhs) noexcept = default;
 
   /**
    * @brief  Move assignment operator.
-   * @parma[in] rhs OutputLayer to be moved.
+   * @parma[in] rhs MultiOutLayer to be moved.
    */
-  OutputLayer &operator=(OutputLayer &&rhs) = default;
+  MultiOutLayer &operator=(MultiOutLayer &&rhs) = default;
 
   /**
    * @copydoc Layer::finalize(InitLayerContext &context)
@@ -82,7 +82,7 @@ public:
   /**
    * @copydoc Layer::getType()
    */
-  const std::string getType() const override { return OutputLayer::type; };
+  const std::string getType() const override { return MultiOutLayer::type; };
 
   inline static const std::string type = "multiout";
 };
@@ -90,4 +90,4 @@ public:
 } // namespace nntrainer
 
 #endif /* __cplusplus */
-#endif /* __OUTPUT_LAYER_H__ */
+#endif /* __MULTIOUT_LAYER_H__ */
index f612cba..cb2419f 100644 (file)
@@ -77,7 +77,8 @@ TEST_P(DataProducerSemantics, fetch_one_epoch_or_10_iteration_pn) {
 
   if (has_fixed_size) {
     {
-      auto [last, ins, labels] = generator();
+      auto result = generator();
+      bool last = std::get<0>(result);
       EXPECT_TRUE(last);
     }
 
index 96bdc37..c16d435 100644 (file)
 #include <gtest/gtest.h>
 
 #include <layers_common_tests.h>
-#include <output_layer.h>
+#include <multiout_layer.h>
 
 auto semantic_output =
-  LayerSemanticsParamType(nntrainer::createLayer<nntrainer::OutputLayer>,
-                          nntrainer::OutputLayer::type, {}, 0, false);
+  LayerSemanticsParamType(nntrainer::createLayer<nntrainer::MultiOutLayer>,
+                          nntrainer::MultiOutLayer::type, {}, 0, false);
 
 INSTANTIATE_TEST_CASE_P(Output, LayerSemantics,
                         ::testing::Values(semantic_output));
index c252267..2a62f17 100644 (file)
@@ -630,7 +630,7 @@ TEST(nntrainerIniTest, backbone_p_17) {
 
 /**
  * @brief Ini file unittest with backbone
- * @note Output layer name not found, epmty backbone
+ * @note Multi Output layer name not found, epmty backbone
  */
 TEST(nntrainerIniTest, backbone_n_18) {
   nntrainer::NeuralNetwork NN;
index 3c8438f..586ffd7 100644 (file)
@@ -20,8 +20,8 @@
 
 #include <input_layer.h>
 #include <layer.h>
+#include <multiout_layer.h>
 #include <neuralnet.h>
-#include <output_layer.h>
 #include <weight.h>
 
 #include "nntrainer_test_util.h"
@@ -271,13 +271,13 @@ void NodeWatcher::forward(int iteration, NodeWatcher &next_node) {
   }
 
   if (!next_node.node->supportInPlace() &&
-      getNodeType() != nntrainer::OutputLayer::type)
+      getNodeType() != nntrainer::MultiOutLayer::type)
     verify(out, expected_output, err_msg + " at output");
 }
 
 void NodeWatcher::backward(int iteration, bool verify_deriv, bool verify_grad) {
 
-  if (getNodeType() == nntrainer::OutputLayer::type) {
+  if (getNodeType() == nntrainer::MultiOutLayer::type) {
     return;
   }
 
@@ -492,7 +492,7 @@ GraphWatcher::prepareData(std::ifstream &f,
 
 void GraphWatcher::readIteration(std::ifstream &f) {
   for (auto &i : nodes) {
-    if (i.getNodeType() == nntrainer::OutputLayer::type) {
+    if (i.getNodeType() == nntrainer::MultiOutLayer::type) {
       continue;
     }