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.
{
// 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);
handle = IntPtr.Zero;
}
- disposed = true;
}
/// <summary>
{
return handle;
}
+
+ internal void RemoveOwnership()
+ {
+ this.hasOwnership = false;
+ }
}
}
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()}");
}
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;
}