[MachineLearning.Train] Modify hasOwnership default value of layer
authorHyunil <hyunil46.park@samsung.com>
Thu, 14 Jul 2022 06:37:02 +0000 (15:37 +0900)
committerJijoong Moon <jijoong.moon@samsung.com>
Tue, 23 Aug 2022 05:50:26 +0000 (14:50 +0900)
- hasOwnership default value is true.
- hasOwnership is set to false after AddLayer().
- The layer created internally by GetLayer() has false value.

Signed-off-by: Hyunil <hyunil46.park@samsung.com>
src/Tizen.MachineLearning.Train/Tizen.MachineLearning.Train/Layer.cs
src/Tizen.MachineLearning.Train/Tizen.MachineLearning.Train/Model.cs

index f166bc9..bc01c12 100644 (file)
@@ -34,8 +34,8 @@ namespace Tizen.MachineLearning.Train
         private IntPtr handle = IntPtr.Zero;
         private bool disposed = false;
 
-        /// if true, model will be destroy layer handle
-        private bool hasOwnership = false;
+        /// if false, model will be destroy layer handle
+        private bool hasOwnership = true;
 
         /// <summary>
         /// Creates a neural network layer.
@@ -90,8 +90,16 @@ namespace Tizen.MachineLearning.Train
             {
                 // release managed object
             }
+
+            disposed = true;
+
+            if (!hasOwnership){
+                Log.Error(NNTrainer.Tag, "Cannot destroy layer already added in a Model. Model will destroy this layer");
+                return;
+            }
+
             // release unmanaged object
-            if (handle != IntPtr.Zero && !hasOwnership)
+            if (handle != IntPtr.Zero)
             {
                 // Destroy the neural network layer.
                 NNTrainerError ret = Interop.Layer.Destroy(handle);
@@ -99,7 +107,6 @@ namespace Tizen.MachineLearning.Train
 
                 handle = IntPtr.Zero;
             }
-            disposed = true;
         }
 
         /// <summary>
@@ -128,5 +135,10 @@ namespace Tizen.MachineLearning.Train
         {
             return handle;
         }
+
+        internal void RemoveOwnership()
+        {
+            this.hasOwnership = false;
+        }
     } 
 }
index a437730..77d610d 100644 (file)
@@ -254,8 +254,12 @@ namespace Tizen.MachineLearning.Train
                 Log.Error(NNTrainer.Tag, "layer instance is null");
                 throw new ArgumentNullException(nameof(layer));
             }
+
+            //Model has ownership of layer;
             NNTrainerError ret = Interop.Model.AddLayer(handle, layer.GetHandle());
             NNTrainer.CheckException(ret, "Failed to add layer");
+            layer.RemoveOwnership();
+
             Log.Info(NNTrainer.Tag, $"AddLayer:\n{layer.GetHandle()}");
         }
 
@@ -281,7 +285,7 @@ namespace Tizen.MachineLearning.Train
             NNTrainerError ret = Interop.Model.GetLayer(handle, layerName, out layerHandle);
             NNTrainer.CheckException(ret, "Failed to get layer");
 
-            Layer layer = new Layer(layerHandle, true);
+            Layer layer = new Layer(layerHandle, false);
     
             return layer;
         }