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"); } }
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"); } }