diff --git a/src/TensorFlowNET.Core/Tensors/Tensor.Creation.cs b/src/TensorFlowNET.Core/Tensors/Tensor.Creation.cs index 785ae192..c9b7b750 100644 --- a/src/TensorFlowNET.Core/Tensors/Tensor.Creation.cs +++ b/src/TensorFlowNET.Core/Tensors/Tensor.Creation.cs @@ -520,41 +520,24 @@ namespace Tensorflow var dataType = ToTFDataType(nd.dtype); // shape var dims = nd.shape.Select(x => (long)x).ToArray(); - var nd1 = nd.ravel(); - switch (nd.dtype.Name) + // var nd1 = nd.ravel(); + /*switch (nd.dtype.Name) { case "Boolean": var boolVals = Array.ConvertAll(nd1.ToArray(), x => Convert.ToByte(x)); Marshal.Copy(boolVals, 0, dotHandle, nd.size); break; - case "Int16": - Marshal.Copy(nd1.ToArray(), 0, dotHandle, nd.size); - break; - case "Int32": - Marshal.Copy(nd1.ToArray(), 0, dotHandle, nd.size); - break; - case "Int64": - Marshal.Copy(nd1.ToArray(), 0, dotHandle, nd.size); - break; - case "Single": - Marshal.Copy(nd1.ToArray(), 0, dotHandle, nd.size); - break; - case "Double": - Marshal.Copy(nd1.ToArray(), 0, dotHandle, nd.size); - break; - case "Byte": - Marshal.Copy(nd1.ToArray(), 0, dotHandle, nd.size); - break; case "String": throw new NotImplementedException($"Marshal.Copy failed for {nd.dtype.Name}."); //return new Tensor(UTF8Encoding.UTF8.GetBytes(nd.ToArray(0)), TF_DataType.TF_STRING); default: - throw new NotImplementedException($"Marshal.Copy failed for {nd.dtype.Name}."); - } + System.Buffer.MemoryCopy(nd1.Unsafe.Address, dotHandle.ToPointer(), nd.size, nd.size); + break; + }*/ var tfHandle = c_api.TF_NewTensor(dataType, dims, dims.Length, - dotHandle, + new IntPtr(nd.Unsafe.Address), (UIntPtr)buffersize, _hGlobalDeallocator, ref _deallocatorArgs); @@ -673,7 +656,8 @@ namespace Tensorflow { if (args.deallocator_called) return; - Marshal.FreeHGlobal(dataPtr); + // NumSharp will dispose + // Marshal.FreeHGlobal(dataPtr); args.deallocator_called = true; }