Ejemplo n.º 1
0
        private Layer ConvertMul(tflite.Operator op)
        {
            var inputs = op.GetInputsArray();
            var inputA = _graph.Tensors(inputs[0]).Value;
            var inputB = _graph.Tensors(inputs[1]).Value;

            if (inputA.ShapeLength == 0)
            {
                var layer = new Mul(inputB.GetShapeArray().ToNCHW(), _model.GetScalar <float>(inputA));
                _inputs.Add(layer.Input, inputs[1]);
                _outputs.Add(op.Outputs(0), layer.Output);
                return(layer);
            }
            else if (inputB.ShapeLength == 0)
            {
                var layer = new Mul(inputA.GetShapeArray().ToNCHW(), _model.GetScalar <float>(inputB));
                _inputs.Add(layer.Input, inputs[0]);
                _outputs.Add(op.Outputs(0), layer.Output);
                return(layer);
            }
            else
            {
                throw new LayerNotSupportedException(op.ToString(), "Only scalar multiply is supported");
            }
        }
Ejemplo n.º 2
0
        private Layer ConvertMean(tflite.Operator op)
        {
            var inputs = op.GetInputsArray();
            var input  = _graph.Tensors(inputs[0]).Value;
            var axes   = _model.GetTensor <int>(_graph.Tensors(inputs[1]).Value);

            if (axes.ToArray().SequenceEqual(new[] { 1, 2 }))
            {
                var layer = new GlobalAveragePool(input.GetShapeArray().ToNCHW());
                _inputs.Add(layer.Input, inputs[0]);
                var reshape = new Reshape(layer.Output.Dimensions, new[] { -1, layer.Output.Dimensions[1] });
                reshape.Input.SetConnection(layer.Output);
                _outputs.Add(op.Outputs(0), layer.Output);
                return(reshape);
            }
            else
            {
                throw new LayerNotSupportedException(op.ToString(), "Only [1,2] axis mean is supported");
            }
        }