コード例 #1
0
        public unsafe InputShape[] GetInputShapes()
        {
            var shapes = new input_shapes_t();

            ie_network_get_input_shapes(_network, ref shapes).Check(nameof(ie_network_get_input_shapes));
            try
            {
                var numShapes = (int)shapes.shape_num;
                var results   = new InputShape[numShapes];
                var span      = new ReadOnlySpan <input_shape_t>(shapes.shapes, numShapes);
                for (var i = 0; i < numShapes; i++)
                {
                    var shape = span[i];
                    results[i] = new InputShape(Marshal.PtrToStringAnsi(shape.name) !, shape.shape);
                }
                return(results);
            }
            finally
            {
                ie_network_input_shapes_free(ref shapes);
            }
        }
コード例 #2
0
        public unsafe void Reshape(InputShape[] newShapes)
        {
            var shapes = new input_shapes_t();

            ie_network_get_input_shapes(_network, ref shapes).Check(nameof(ie_network_get_input_shapes));
            try
            {
                var numShapes = (int)shapes.shape_num;
                if (newShapes.Length != numShapes)
                {
                    throw new InvalidOperationException(FormattableString.Invariant($"Mismatch in shape count. Got {newShapes.Length}, expected {numShapes}"));
                }
                var span = new Span <input_shape_t>(shapes.shapes, numShapes);
                for (var i = 0; i < numShapes; i++)
                {
                    var newShape = newShapes[i];
                    var name     = Marshal.PtrToStringAnsi(span[i].name) !;
                    if (!string.Equals(name, newShape.Name, StringComparison.Ordinal))
                    {
                        throw new InvalidOperationException(FormattableString.Invariant($"Mismatch in shape {i} name. Got {newShape.Name} expected {name}"));
                    }
                    var ranks = span[i].shape.ranks;
                    if (ranks != newShape.Dimensions.ranks)
                    {
                        throw new InvalidOperationException(FormattableString.Invariant($"Mismatch in dimensions {i}. Got {newShape.Dimensions.ranks} expected {ranks}"));
                    }
                    for (var j = 0; j < ranks; j++)
                    {
                        span[i].shape[j] = newShape.Dimensions[j];
                    }
                }
                ie_network_reshape(_network, shapes).Check(nameof(ie_network_reshape));
            }
            finally
            {
                ie_network_input_shapes_free(ref shapes);
            }
        }