private static bool _TryClone <TValue>(this ONNX.NamedOnnxValue src, out ONNX.NamedOnnxValue dst) where TValue : unmanaged { if (src.Value is ONNX.Tensors.DenseTensor <TValue> srcTensor) { var dstTensor = new ONNX.Tensors.DenseTensor <TValue>(srcTensor.Dimensions); srcTensor.Buffer.CopyTo(dstTensor.Buffer); dst = ONNX.NamedOnnxValue.CreateFromTensor(src.Name, dstTensor); return(true); } dst = null; return(false); }
private ONNX.Tensors.DenseTensor <T> _UpdateTensor <T>(ref ONNX.NamedOnnxValue namedValue, params int[] dims) where T : unmanaged { if (namedValue.Value is ONNX.Tensors.DenseTensor <T> denseTensor) { if (denseTensor.Dimensions.SequenceEqual(dims)) { return(denseTensor); } } denseTensor = new ONNX.Tensors.DenseTensor <T>(dims); namedValue = ONNX.NamedOnnxValue.CreateFromTensor(namedValue.Name, denseTensor); return(denseTensor); }
public static ONNX.NamedOnnxValue CreateNamedOnnexValue(this ONNX.NodeMetadata metadata, string name) { System.Diagnostics.Debug.Assert(metadata.OnnxValueType == ONNX.OnnxValueType.ONNX_TYPE_TENSOR); if (metadata.IsTensor) { if (metadata.Dimensions.Any(item => item < 0)) { // it's a dynamic tensor return(ONNX.NamedOnnxValue.CreateFromTensor <float>(name, null)); } if (metadata.ElementType == typeof(Byte)) { var denseTensor = new ONNX.Tensors.DenseTensor <Byte>(metadata.Dimensions); return(ONNX.NamedOnnxValue.CreateFromTensor(name, denseTensor)); } if (metadata.ElementType == typeof(int)) { var denseTensor = new ONNX.Tensors.DenseTensor <int>(metadata.Dimensions); return(ONNX.NamedOnnxValue.CreateFromTensor(name, denseTensor)); } if (metadata.ElementType == typeof(long)) { var denseTensor = new ONNX.Tensors.DenseTensor <long>(metadata.Dimensions); return(ONNX.NamedOnnxValue.CreateFromTensor(name, denseTensor)); } if (metadata.ElementType == typeof(float)) { var denseTensor = new ONNX.Tensors.DenseTensor <float>(metadata.Dimensions); return(ONNX.NamedOnnxValue.CreateFromTensor(name, denseTensor)); } if (metadata.ElementType == typeof(double)) { var denseTensor = new ONNX.Tensors.DenseTensor <double>(metadata.Dimensions); return(ONNX.NamedOnnxValue.CreateFromTensor(name, denseTensor)); } } throw new NotImplementedException(); }