コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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();
        }