[c-api] c-api depends only on cc-api
authorParichay Kapoor <pk.kapoor@samsung.com>
Mon, 29 Mar 2021 11:34:49 +0000 (20:34 +0900)
committerJijoong Moon <jijoong.moon@samsung.com>
Fri, 2 Apr 2021 00:45:56 +0000 (09:45 +0900)
Update c-api implementation to only depend on cc-api
Also add some minor additional functions in the cc-api
to support the c-api functionality.

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

Signed-off-by: Parichay Kapoor <pk.kapoor@samsung.com>
Applications/TransferLearning/Draw_Classification/jni/Android.mk
api/capi/include/nntrainer_internal.h
api/capi/meson.build
api/capi/src/nntrainer.cpp
api/capi/src/nntrainer_util.cpp [deleted file]
api/ccapi/include/layer.h
api/ccapi/include/model.h
api/meson.build
jni/Android.mk
nntrainer/layers/layer_internal.h
test/unittest/unittest_nntrainer_appcontext.cpp

index e600786..ed22b3a 100644 (file)
@@ -34,9 +34,17 @@ include $(PREBUILT_SHARED_LIBRARY)
 
 include $(CLEAR_VARS)
 
+LOCAL_MODULE := ccapi-nntrainer
+LOCAL_SRC_FILES := $(NNTRAINER_ROOT)/libs/$(TARGET_ARCH_ABI)/libccapi-nntrainer.so
+LOCAL_SHARED_LIBRARIES := nntrainer
+
+include $(PREBUILT_SHARED_LIBRARY)
+
+include $(CLEAR_VARS)
+
 LOCAL_MODULE := capi-nntrainer
 LOCAL_SRC_FILES := $(NNTRAINER_ROOT)/libs/$(TARGET_ARCH_ABI)/libcapi-nntrainer.so
-LOCAL_SHARED_LIBRARIES := nntrainer
+LOCAL_SHARED_LIBRARIES := ccapi-nntrainer
 
 include $(PREBUILT_SHARED_LIBRARY)
 
index a7f983f..0d02644 100644 (file)
 #ifndef __NNTRAINER_INTERNAL_H__
 #define __NNTRAINER_INTERNAL_H__
 
-#include <layer_internal.h>
 #include <mutex>
-#include <neuralnet.h>
-#include <nntrainer.h>
-#include <nntrainer_log.h>
 #include <string>
 #include <unordered_map>
 
+#include <nntrainer.h>
+
+#include <dataset.h>
+#include <layer.h>
+#include <model.h>
+#include <optimizer.h>
+
+#include <nntrainer_log.h>
+
 #define ML_NNTRAINER_MAGIC 0x777F888F
 
 /* Tizen ML feature */
@@ -73,7 +78,7 @@ extern "C" {
  */
 typedef struct {
   uint magic;
-  std::shared_ptr<nntrainer::Layer> layer;
+  std::shared_ptr<ml::train::Layer> layer;
   bool in_use;
   std::mutex m;
 } ml_train_layer;
@@ -85,7 +90,7 @@ typedef struct {
  */
 typedef struct {
   uint magic;
-  std::shared_ptr<nntrainer::Optimizer> optimizer;
+  std::shared_ptr<ml::train::Optimizer> optimizer;
   bool in_use;
   std::mutex m;
 } ml_train_optimizer;
@@ -96,7 +101,7 @@ typedef struct {
  */
 typedef struct {
   uint magic;
-  std::shared_ptr<nntrainer::DataBuffer> data_buffer;
+  std::shared_ptr<ml::train::Dataset> dataset;
   bool in_use;
   std::mutex m;
 } ml_train_dataset;
@@ -106,7 +111,7 @@ typedef struct {
  */
 typedef struct {
   uint magic;
-  std::shared_ptr<nntrainer::NeuralNetwork> network;
+  std::shared_ptr<ml::train::Model> model;
   std::unordered_map<std::string, ml_train_layer *> layers_map;
   ml_train_optimizer *optimizer;
   ml_train_dataset *dataset;
@@ -328,19 +333,4 @@ void ml_tizen_set_feature_state(feature_state_t state);
 }
 #endif /* __cplusplus */
 
-/**
- * @brief Convert nntrainer API optimizer type to neural network optimizer type
- * @param[in] type Optimizer type API enum
- * @return const std::string optimizer type
- */
-const std::string
-ml_optimizer_to_nntrainer_type(ml_train_optimizer_type_e type);
-
-/**
- * @brief Convert nntrainer API layer type to neural network layer type
- * @param[in] type Layer type API enum
- * @return const std::string layer type
- */
-const std::string ml_layer_to_nntrainer_type(ml_train_layer_type_e type);
-
 #endif
index 2ac50ae..4710fda 100644 (file)
@@ -3,7 +3,6 @@ capi_inc += include_directories('include')
 capi_inc += include_directories('..')
 capi_src = []
 capi_src += meson.current_source_dir() / 'src' / 'nntrainer.cpp'
-capi_src += meson.current_source_dir() / 'src' / 'nntrainer_util.cpp'
 
 if get_option('enable-tizen') and get_option('enable-tizen-feature-check')
   capi_src += meson.current_source_dir() / 'src' / 'nntrainer-capi-tizen-feature-check.cpp'
@@ -14,7 +13,7 @@ capi_headers += meson.current_source_dir() / 'include' / 'nntrainer.h'
 capi_headers += meson.current_source_dir() / '..' / 'nntrainer-api-common.h'
 
 capi_deps = [
-  nntrainer_dep
+  nntrainer_ccapi_dep
 ]
 
 if get_option('enable-tizen')
index 86c2998..796b89a 100644 (file)
  * @author Parichay Kapoor <pk.kapoor@samsung.com>
  * @bug No known bugs except for NYI items
  */
-#include <databuffer_factory.h>
-#include <layer_factory.h>
-#include <layer_internal.h>
-#include <neuralnet.h>
-#include <nntrainer_error.h>
+
+#include <cstdarg>
+#include <cstring>
+#include <sstream>
+#include <string>
+
+#include <nntrainer.h>
 #include <nntrainer_internal.h>
+
+#include <nntrainer_error.h>
 #include <nntrainer_log.h>
-#include <optimizer_factory.h>
-#include <sstream>
-#include <stdarg.h>
-#include <string.h>
 
 /**
  * @brief   Global lock for nntrainer C-API
@@ -132,7 +132,7 @@ static int exception_bounded_make_shared(Tp &target, Types... args) {
  */
 template <typename T>
 static int ml_train_dataset_create(ml_train_dataset_h *dataset,
-                                   nntrainer::DataBufferType type, T train,
+                                   ml::train::DatasetType type, T train,
                                    T valid, T test) {
   int status = ML_ERROR_NONE;
 
@@ -143,8 +143,7 @@ static int ml_train_dataset_create(ml_train_dataset_h *dataset,
   nndataset->in_use = false;
 
   returnable f = [&]() {
-    nndataset->data_buffer =
-      nntrainer::createDataBuffer(type, train, valid, test);
+    nndataset->dataset = ml::train::createDataset(type, train, valid, test);
     return ML_ERROR_NONE;
   };
 
@@ -164,7 +163,7 @@ extern "C" {
 #endif
 
 /**
- * @brief Function to create Network::NeuralNetwork object.
+ * @brief Function to create ml::train::Model object.
  */
 static int nn_object(ml_train_model_h *model) {
   int status = ML_ERROR_NONE;
@@ -179,11 +178,15 @@ static int nn_object(ml_train_model_h *model) {
 
   *model = nnmodel;
 
-  status =
-    exception_bounded_make_shared<nntrainer::NeuralNetwork>(nnmodel->network);
+  returnable f = [&]() {
+    nnmodel->model = ml::train::createModel(ml::train::ModelType::NEURAL_NET);
+    return ML_ERROR_NONE;
+  };
+
+  status = nntrainer_exception_boundary(f);
   if (status != ML_ERROR_NONE) {
-    ml_loge("Error: creating nn object failed");
     delete nnmodel;
+    ml_loge("Error: creating nn object failed");
   }
 
   return status;
@@ -204,7 +207,7 @@ int ml_train_model_construct_with_conf(const char *model_conf,
                                        ml_train_model_h *model) {
   int status = ML_ERROR_NONE;
   ml_train_model *nnmodel;
-  std::shared_ptr<nntrainer::NeuralNetwork> NN;
+  std::shared_ptr<ml::train::Model> m;
   returnable f;
 
   status = ml_train_model_construct(model);
@@ -212,9 +215,9 @@ int ml_train_model_construct_with_conf(const char *model_conf,
     return status;
 
   nnmodel = (ml_train_model *)(*model);
-  NN = nnmodel->network;
+  m = nnmodel->model;
 
-  f = [&]() { return NN->loadFromConfig(model_conf); };
+  f = [&]() { return m->loadFromConfig(model_conf); };
   status = nntrainer_exception_boundary(f);
   if (status != ML_ERROR_NONE) {
     ml_train_model_destroy(*model);
@@ -228,7 +231,7 @@ int ml_train_model_compile(ml_train_model_h model, ...) {
   const char *data;
   ml_train_model *nnmodel;
   returnable f;
-  std::shared_ptr<nntrainer::NeuralNetwork> NN;
+  std::shared_ptr<ml::train::Model> m;
 
   check_feature_state();
 
@@ -246,20 +249,20 @@ int ml_train_model_compile(ml_train_model_h model, ...) {
   {
     ML_TRAIN_GET_VALID_MODEL_LOCKED(nnmodel, model);
     ML_TRAIN_ADOPT_LOCK(nnmodel, model_lock);
-    NN = nnmodel->network;
+    m = nnmodel->model;
   }
 
-  f = [&]() { return NN->setProperty(arg_list); };
+  f = [&]() { return m->setProperty(arg_list); };
   status = nntrainer_exception_boundary(f);
   if (status != ML_ERROR_NONE)
     return status;
 
-  f = [&]() { return NN->compile(); };
+  f = [&]() { return m->compile(); };
   status = nntrainer_exception_boundary(f);
   if (status != ML_ERROR_NONE)
     return status;
 
-  f = [&]() { return NN->initialize(); };
+  f = [&]() { return m->initialize(); };
   status = nntrainer_exception_boundary(f);
   if (status != ML_ERROR_NONE)
     return status;
@@ -271,7 +274,7 @@ int ml_train_model_run(ml_train_model_h model, ...) {
   int status = ML_ERROR_NONE;
   ml_train_model *nnmodel;
   const char *data;
-  std::shared_ptr<nntrainer::NeuralNetwork> NN;
+  std::shared_ptr<ml::train::Model> m;
 
   check_feature_state();
 
@@ -290,10 +293,10 @@ int ml_train_model_run(ml_train_model_h model, ...) {
   {
     ML_TRAIN_GET_VALID_MODEL_LOCKED(nnmodel, model);
     ML_TRAIN_ADOPT_LOCK(nnmodel, model_lock);
-    NN = nnmodel->network;
+    m = nnmodel->model;
   }
 
-  returnable f = [&]() { return NN->train(arg_list); };
+  returnable f = [&]() { return m->train(arg_list); };
   status = nntrainer_exception_boundary(f);
 
   return status;
@@ -310,8 +313,8 @@ int ml_train_model_destroy(ml_train_model_h model) {
     ML_TRAIN_ADOPT_LOCK(nnmodel, model_lock);
   }
 
-  std::shared_ptr<nntrainer::NeuralNetwork> NN;
-  NN = nnmodel->network;
+  std::shared_ptr<ml::train::Model> m;
+  m = nnmodel->model;
 
   if (nnmodel->optimizer) {
     ML_TRAIN_RESET_VALIDATED_HANDLE(nnmodel->optimizer);
@@ -339,17 +342,17 @@ static int ml_train_model_get_summary_util(ml_train_model_h model,
                                            std::stringstream &ss) {
   int status = ML_ERROR_NONE;
   ml_train_model *nnmodel;
-  std::shared_ptr<nntrainer::NeuralNetwork> NN;
+  std::shared_ptr<ml::train::Model> m;
 
   {
     ML_TRAIN_GET_VALID_MODEL_LOCKED(nnmodel, model);
     ML_TRAIN_ADOPT_LOCK(nnmodel, model_lock);
 
-    NN = nnmodel->network;
+    m = nnmodel->model;
   }
 
   returnable f = [&]() {
-    NN->printPreset(ss, verbosity);
+    m->summarize(ss, verbosity);
     return ML_ERROR_NONE;
   };
 
@@ -384,7 +387,7 @@ int ml_train_model_get_summary(ml_train_model_h model,
   }
 
   *summary = (char *)malloc((size + 1) * sizeof(char));
-  memcpy(*summary, str.c_str(), size + 1);
+  std::memcpy(*summary, str.c_str(), size + 1);
 
   return status;
 }
@@ -406,25 +409,25 @@ int ml_train_model_add_layer(ml_train_model_h model, ml_train_layer_h layer) {
     return ML_ERROR_INVALID_PARAMETER;
   }
 
-  std::shared_ptr<nntrainer::NeuralNetwork> NN;
-  std::shared_ptr<nntrainer::Layer> NL;
+  std::shared_ptr<ml::train::Model> m;
+  std::shared_ptr<ml::train::Layer> l;
 
-  NN = nnmodel->network;
-  NL = nnlayer->layer;
+  m = nnmodel->model;
+  l = nnlayer->layer;
 
-  if (nnmodel->layers_map.count(NL->getName())) {
+  if (nnmodel->layers_map.count(l->getName())) {
     ml_loge("It is not allowed to add layer with same name: %s",
-            NL->getName().c_str());
+            l->getName().c_str());
     return ML_ERROR_INVALID_PARAMETER;
   }
 
-  returnable f = [&]() { return NN->addLayer(NL); };
+  returnable f = [&]() { return m->addLayer(l); };
 
   status = nntrainer_exception_boundary(f);
   if (status != ML_ERROR_NONE)
     return status;
 
-  nnmodel->layers_map.insert({NL->getName(), nnlayer});
+  nnmodel->layers_map.insert({l->getName(), nnlayer});
   nnlayer->in_use = true;
   return status;
 }
@@ -447,13 +450,13 @@ int ml_train_model_set_optimizer(ml_train_model_h model,
     return ML_ERROR_INVALID_PARAMETER;
   }
 
-  std::shared_ptr<nntrainer::NeuralNetwork> NN;
-  std::shared_ptr<nntrainer::Optimizer> opt;
+  std::shared_ptr<ml::train::Model> m;
+  std::shared_ptr<ml::train::Optimizer> opt;
 
-  NN = nnmodel->network;
+  m = nnmodel->model;
   opt = nnopt->optimizer;
 
-  returnable f = [&]() { return NN->setOptimizer(opt); };
+  returnable f = [&]() { return m->setOptimizer(opt); };
 
   status = nntrainer_exception_boundary(f);
   if (status == ML_ERROR_NONE) {
@@ -484,13 +487,13 @@ int ml_train_model_set_dataset(ml_train_model_h model,
     return ML_ERROR_INVALID_PARAMETER;
   }
 
-  std::shared_ptr<nntrainer::NeuralNetwork> NN;
-  std::shared_ptr<nntrainer::DataBuffer> data;
+  std::shared_ptr<ml::train::Model> m;
+  std::shared_ptr<ml::train::Dataset> d;
 
-  NN = nnmodel->network;
-  data = nndataset->data_buffer;
+  m = nnmodel->model;
+  d = nndataset->dataset;
 
-  returnable f = [&]() { return NN->setDataBuffer(data); };
+  returnable f = [&]() { return m->setDataset(d); };
 
   status = nntrainer_exception_boundary(f);
   if (status == ML_ERROR_NONE) {
@@ -522,14 +525,14 @@ int ml_train_model_get_layer(ml_train_model_h model, const char *layer_name,
   }
 
   /**
-   * if layer not found in layers_map, get layer from NeuralNetwork,
+   * if layer not found in layers_map, get layer from model,
    * wrap it in struct nnlayer, add new entry in layer_map and then return
    */
-  std::shared_ptr<nntrainer::NeuralNetwork> NN;
-  std::shared_ptr<nntrainer::Layer> NL;
+  std::shared_ptr<ml::train::Model> m;
+  std::shared_ptr<ml::train::Layer> l;
 
-  NN = nnmodel->network;
-  returnable f = [&]() { return NN->getLayer(layer_name, &NL); };
+  m = nnmodel->model;
+  returnable f = [&]() { return m->getLayer(layer_name, &l); };
   status = nntrainer_exception_boundary(f);
 
   if (status != ML_ERROR_NONE)
@@ -537,9 +540,9 @@ int ml_train_model_get_layer(ml_train_model_h model, const char *layer_name,
 
   ml_train_layer *nnlayer = new ml_train_layer;
   nnlayer->magic = ML_NNTRAINER_MAGIC;
-  nnlayer->layer = NL;
+  nnlayer->layer = l;
   nnlayer->in_use = true;
-  nnmodel->layers_map.insert({NL->getName(), nnlayer});
+  nnmodel->layers_map.insert({l->getName(), nnlayer});
 
   *layer = nnlayer;
   return status;
@@ -556,7 +559,7 @@ int ml_train_layer_create(ml_train_layer_h *layer, ml_train_layer_type_e type) {
   nnlayer->in_use = false;
 
   returnable f = [&]() {
-    nnlayer->layer = nntrainer::createLayer(ml_layer_to_nntrainer_type(type));
+    nnlayer->layer = ml::train::createLayer((ml::train::LayerType)type);
     return ML_ERROR_NONE;
   };
 
@@ -597,7 +600,7 @@ int ml_train_layer_set_property(ml_train_layer_h layer, ...) {
   int status = ML_ERROR_NONE;
   ml_train_layer *nnlayer;
   const char *data;
-  std::shared_ptr<nntrainer::Layer> NL;
+  std::shared_ptr<ml::train::Layer> l;
 
   check_feature_state();
 
@@ -617,10 +620,10 @@ int ml_train_layer_set_property(ml_train_layer_h layer, ...) {
     ML_TRAIN_GET_VALID_LAYER_LOCKED(nnlayer, layer);
     ML_TRAIN_ADOPT_LOCK(nnlayer, layer_lock);
 
-    NL = nnlayer->layer;
+    l = nnlayer->layer;
   }
 
-  returnable f = [&]() { return NL->setProperty(arg_list); };
+  returnable f = [&]() { return l->setProperty(arg_list); };
   status = nntrainer_exception_boundary(f);
 
   return status;
@@ -638,7 +641,7 @@ int ml_train_optimizer_create(ml_train_optimizer_h *optimizer,
 
   returnable f = [&]() {
     nnopt->optimizer =
-      nntrainer::createOptimizer(ml_optimizer_to_nntrainer_type(type));
+      ml::train::createOptimizer((ml::train::OptimizerType)type);
     return ML_ERROR_NONE;
   };
 
@@ -678,7 +681,7 @@ int ml_train_optimizer_set_property(ml_train_optimizer_h optimizer, ...) {
   int status = ML_ERROR_NONE;
   ml_train_optimizer *nnopt;
   const char *data;
-  std::shared_ptr<nntrainer::Optimizer> opt;
+  std::shared_ptr<ml::train::Optimizer> opt;
 
   check_feature_state();
 
@@ -712,7 +715,7 @@ int ml_train_dataset_create_with_generator(ml_train_dataset_h *dataset,
                                            ml_train_datagen_cb train_cb,
                                            ml_train_datagen_cb valid_cb,
                                            ml_train_datagen_cb test_cb) {
-  return ml_train_dataset_create(dataset, nntrainer::DataBufferType::GENERATOR,
+  return ml_train_dataset_create(dataset, ml::train::DatasetType::GENERATOR,
                                  train_cb, valid_cb, test_cb);
 }
 
@@ -720,7 +723,7 @@ int ml_train_dataset_create_with_file(ml_train_dataset_h *dataset,
                                       const char *train_file,
                                       const char *valid_file,
                                       const char *test_file) {
-  return ml_train_dataset_create(dataset, nntrainer::DataBufferType::FILE,
+  return ml_train_dataset_create(dataset, ml::train::DatasetType::FILE,
                                  train_file, valid_file, test_file);
 }
 
@@ -728,7 +731,7 @@ int ml_train_dataset_set_property(ml_train_dataset_h dataset, ...) {
   int status = ML_ERROR_NONE;
   ml_train_dataset *nndataset;
   void *data;
-  std::shared_ptr<nntrainer::DataBuffer> data_buffer;
+  std::shared_ptr<ml::train::Dataset> d;
 
   check_feature_state();
 
@@ -748,10 +751,10 @@ int ml_train_dataset_set_property(ml_train_dataset_h dataset, ...) {
     ML_TRAIN_GET_VALID_DATASET_LOCKED(nndataset, dataset);
     ML_TRAIN_ADOPT_LOCK(nndataset, dataset_lock);
 
-    data_buffer = nndataset->data_buffer;
+    d = nndataset->dataset;
   }
 
-  returnable f = [&]() { return data_buffer->setProperty(arg_list); };
+  returnable f = [&]() { return d->setProperty(arg_list); };
   status = nntrainer_exception_boundary(f);
 
   return status;
diff --git a/api/capi/src/nntrainer_util.cpp b/api/capi/src/nntrainer_util.cpp
deleted file mode 100644 (file)
index 5ce6a9d..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-/**
- * Copyright (C) 2020 Parichay Kapoor <pk.kapoor@samsung.com>
- *
- * @file nntrainer_util.cpp
- * @date 10 July 2020
- * @brief NNTrainer/Utilizer C-API Wrapper.
- * @see        https://github.com/nnstreamer/nntrainer
- * @author Parichay Kapoor <pk.kapoor@samsung.com>
- * @bug No known bugs except for NYI items
- */
-
-#include <nntrainer_error.h>
-#include <nntrainer_internal.h>
-
-#include <activation_layer.h>
-#include <addition_layer.h>
-#include <bn_layer.h>
-#include <concat_layer.h>
-#include <conv2d_layer.h>
-#include <fc_layer.h>
-#include <flatten_layer.h>
-#include <input_layer.h>
-#include <loss_layer.h>
-#include <output_layer.h>
-#include <pooling2d_layer.h>
-
-/**
- * @brief Convert nntrainer API optimizer type to neural network optimizer type
- */
-const std::string
-ml_optimizer_to_nntrainer_type(ml_train_optimizer_type_e type) {
-  switch (type) {
-  case ML_TRAIN_OPTIMIZER_TYPE_ADAM:
-    return "adam";
-  case ML_TRAIN_OPTIMIZER_TYPE_SGD:
-    return "sgd";
-  case ML_TRAIN_OPTIMIZER_TYPE_UNKNOWN:
-  /// fall through intended
-  default:
-    throw nntrainer::exception::not_supported(
-      "[ml_optimmizer_to_nntrainer_type] Not supported type given");
-  }
-
-  throw nntrainer::exception::not_supported(
-    "[ml_optimmizer_to_nntrainer_type] Not supported type given");
-}
-
-/**
- * @brief Convert nntrainer API layer type to neural network layer type
- */
-const std::string ml_layer_to_nntrainer_type(ml_train_layer_type_e type) {
-  switch (type) {
-  case ML_TRAIN_LAYER_TYPE_FC:
-    return nntrainer::FullyConnectedLayer::type;
-  case ML_TRAIN_LAYER_TYPE_INPUT:
-    return nntrainer::InputLayer::type;
-  case ML_TRAIN_LAYER_TYPE_BN:
-    return nntrainer::BatchNormalizationLayer::type;
-  case ML_TRAIN_LAYER_TYPE_CONV2D:
-    return nntrainer::Conv2DLayer::type;
-  case ML_TRAIN_LAYER_TYPE_POOLING2D:
-    return nntrainer::Pooling2DLayer::type;
-  case ML_TRAIN_LAYER_TYPE_FLATTEN:
-    return nntrainer::FlattenLayer::type;
-  case ML_TRAIN_LAYER_TYPE_ACTIVATION:
-    return nntrainer::ActivationLayer::type;
-  case ML_TRAIN_LAYER_TYPE_ADDITION:
-    return nntrainer::AdditionLayer::type;
-  case ML_TRAIN_LAYER_TYPE_CONCAT:
-    return nntrainer::ConcatLayer::type;
-  case ML_TRAIN_LAYER_TYPE_MULTIOUT:
-    return nntrainer::OutputLayer::type;
-  case ML_TRAIN_LAYER_TYPE_UNKNOWN:
-  /// fall through intended
-  default:
-    throw nntrainer::exception::not_supported(
-      "[ml_layer_to_nntrainer_type] Not supported type given");
-  }
-
-  throw std::logic_error(
-    "[ml_layer_to_nntrainer_type] Control shouldn't reach here");
-}
index b6e6fca..3cb27c7 100644 (file)
@@ -116,6 +116,15 @@ public:
    *  { std::string property_name, void * property_val, ...}
    */
   virtual int setProperty(std::vector<std::string> values) = 0;
+
+  /**
+   * @brief     Get name of the layer
+   * @retval    name of the layer
+   * @note      This name is unique to this layer in a model
+   * @Note      This name might be changed once this layer is added to the model
+   * to keep the name unique to the model
+   */
+  virtual std::string getName() noexcept = 0;
 };
 
 /**
index abc3d9c..716600b 100644 (file)
@@ -87,7 +87,7 @@ public:
 
   /**
    * @brief     Initialize Network. This should be called after setting the
-   * property and compiling. hyperparameters.
+   * property and compiling.
    * @retval #ML_ERROR_NONE Successful.
    * @retval #ML_ERROR_INVALID_PARAMETER invalid parameter.
    */
@@ -135,6 +135,15 @@ public:
    */
   virtual int setOptimizer(std::shared_ptr<Optimizer> optimizer) = 0;
 
+  /*
+   * @brief     get layer by name from neural network model
+   * @param[in] name name of the layer to get
+   * @param[out] layer shared_ptr to hold the layer to get
+   * @retval #ML_ERROR_NONE Successful.
+   * @retval #ML_ERROR_INVALID_PARAMETER invalid parameter.
+   */
+  virtual int getLayer(const char *name, std::shared_ptr<Layer> *layer) = 0;
+
   /**
    * @brief     Summarize the model
    * @param out std::ostream to get the model summary
index 4a6c76c..41b7440 100644 (file)
@@ -1,8 +1,10 @@
-if get_option('enable-capi')
-  subdir('capi')
-endif
-
-
 if get_option('enable-ccapi')
   subdir('ccapi')
 endif
+
+if get_option('enable-capi')
+  if not get_option('enable-ccapi')
+    error('enable-ccapi must be set for capi as well')
+  endif
+  subdir('capi')
+endif
index 686bb73..5e84b71 100644 (file)
@@ -182,19 +182,17 @@ include $(BUILD_SHARED_LIBRARY)
 
 include $(CLEAR_VARS)
 
-CAPI_NNTRAINER_SRCS := $(NNTRAINER_ROOT)/api/capi/src/nntrainer.cpp \
-                  $(NNTRAINER_ROOT)/api/capi/src/nntrainer_util.cpp
+CCAPI_NNTRAINER_SRCS := $(NNTRAINER_ROOT)/api/ccapi/src/factory.cpp
 
-CAPI_NNTRAINER_INCLUDES := $(NNTRAINER_ROOT)/nntrainer \
+CCAPI_NNTRAINER_INCLUDES := $(NNTRAINER_ROOT)/nntrainer \
                       $(NNTRAINER_ROOT)/nntrainer/dataset \
                       $(NNTRAINER_ROOT)/nntrainer/layers \
                       $(NNTRAINER_ROOT)/nntrainer/models \
-                      $(NNTRAINER_ROOT)/nntrainer/graph \
                       $(NNTRAINER_ROOT)/nntrainer/tensor \
+                      $(NNTRAINER_ROOT)/nntrainer/graph \
                       $(NNTRAINER_ROOT)/nntrainer/optimizers \
                       $(NNTRAINER_ROOT)/api \
                       $(NNTRAINER_ROOT)/api/ccapi/include \
-                      $(NNTRAINER_ROOT)/api/capi/include \
                       $(NNTRAINER_ROOT)/api/capi/include/platform
 
 LOCAL_SHARED_LIBRARIES := nntrainer
@@ -207,28 +205,23 @@ LOCAL_MODULE_TAGS   := optional
 
 LOCAL_LDLIBS        := -llog -landroid
 
-LOCAL_MODULE        := capi-nntrainer
-LOCAL_SRC_FILES     := $(CAPI_NNTRAINER_SRCS)
-LOCAL_C_INCLUDES    := $(CAPI_NNTRAINER_INCLUDES)
+LOCAL_MODULE        := ccapi-nntrainer
+LOCAL_SRC_FILES     := $(CCAPI_NNTRAINER_SRCS)
+LOCAL_C_INCLUDES    := $(CCAPI_NNTRAINER_INCLUDES)
 
 include $(BUILD_SHARED_LIBRARY)
 
 include $(CLEAR_VARS)
 
-CCAPI_NNTRAINER_SRCS := $(NNTRAINER_ROOT)/api/ccapi/src/factory.cpp
+CAPI_NNTRAINER_SRCS := $(NNTRAINER_ROOT)/api/capi/src/nntrainer.cpp
 
-CCAPI_NNTRAINER_INCLUDES := $(NNTRAINER_ROOT)/nntrainer \
-                      $(NNTRAINER_ROOT)/nntrainer/dataset \
-                      $(NNTRAINER_ROOT)/nntrainer/layers \
-                      $(NNTRAINER_ROOT)/nntrainer/models \
-                      $(NNTRAINER_ROOT)/nntrainer/tensor \
-                      $(NNTRAINER_ROOT)/nntrainer/graph \
-                      $(NNTRAINER_ROOT)/nntrainer/optimizers \
+CAPI_NNTRAINER_INCLUDES := $(NNTRAINER_ROOT)/nntrainer \
                       $(NNTRAINER_ROOT)/api \
                       $(NNTRAINER_ROOT)/api/ccapi/include \
+                      $(NNTRAINER_ROOT)/api/capi/include \
                       $(NNTRAINER_ROOT)/api/capi/include/platform
 
-LOCAL_SHARED_LIBRARIES := nntrainer
+LOCAL_SHARED_LIBRARIES := ccapi-nntrainer
 
 LOCAL_ARM_NEON      := true
 LOCAL_CFLAGS        += -pthread -fexceptions
@@ -238,8 +231,8 @@ LOCAL_MODULE_TAGS   := optional
 
 LOCAL_LDLIBS        := -llog -landroid
 
-LOCAL_MODULE        := ccapi-nntrainer
-LOCAL_SRC_FILES     := $(CCAPI_NNTRAINER_SRCS)
-LOCAL_C_INCLUDES    := $(CCAPI_NNTRAINER_INCLUDES)
+LOCAL_MODULE        := capi-nntrainer
+LOCAL_SRC_FILES     := $(CAPI_NNTRAINER_SRCS)
+LOCAL_C_INCLUDES    := $(CAPI_NNTRAINER_INCLUDES)
 
 include $(BUILD_SHARED_LIBRARY)
index 9cfd88e..6d520b3 100644 (file)
@@ -214,6 +214,7 @@ public:
    *            31. in_dim : int ( input dimension for embedding layer )
    *            32. out_dim : int ( output dimesion for embedding layer )
    *            33. in_length : int ( input length for embedding layer )
+   *            34. recurrent_activation :  string (type) - lstm
    */
   enum class PropertyType {
     input_shape = 0,
@@ -250,6 +251,7 @@ public:
     in_dim = 31,
     out_dim = 32,
     in_length = 33,
+    recurrent_activation = 34,
     unknown
   };
 
index 4914753..e7584e0 100644 (file)
@@ -129,7 +129,7 @@ public:
 };
 
 /// @todo solidify the api signature
-class CustomLayer : public ml::train::Layer {
+class CustomLayer : public nntrainer::Layer {
 public:
   static const std::string type;