MatMul transformed to FullyConnected
Hi @zxros10,

You can set  the ```converter.experimental_use_mlir_converter```  to FALSE in the converter to control certain operations like "MatMul, Add, and Relu"  without getting fused. Please try the following.
```
converter = tf.lite.TFLiteConverter.from_saved_model('convpart2/saved_model/')
converter.experimental_use_mlir_converter = False # Use this line of code 
tflite_model_quant = converter.convert()

```
If not resolved please provide a saved model towards issue resolution.

Thank You The saved_model is generated by onnx2tf, the code convert model is https://github.com/PINTO0309/onnx2tf/blob/main/onnx2tf/onnx2tf.py:1249 
     tflite_model = converter.convert()
In this convet, the matmul convert to fullyconnected already. 
I add 
     converter.experimental_use_mlir_converter = False
befor this line, but unuseless. So I modify tensorflow/lite/python/convert.py：931
     enable_mlir_converter = kwargs.get("enable_mlir_converter", True)
to 
    enable_mlir_converter = False
Then execute onnx2tf, has error:

saved_model output started ==========================================================
saved_model output complete!
Traceback (most recent call last):
  File "/usr/local/bin/onnx2tf", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.10/dist-packages/onnx2tf/onnx2tf.py", line 2321, in main
    model = convert(
  File "/usr/local/lib/python3.10/dist-packages/onnx2tf/onnx2tf.py", line 1247, in convert
    tflite_model = converter.convert()
  File "/usr/local/lib/python3.10/dist-packages/tensorflow/lite/python/lite.py", line 2185, in convert
    return super(TFLiteConverterV2, self).convert()
  File "/usr/local/lib/python3.10/dist-packages/tensorflow/lite/python/lite.py", line 1139, in wrapper
    return self._convert_and_export_metrics(convert_func, *args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/tensorflow/lite/python/lite.py", line 1093, in _convert_and_export_metrics
    result = convert_func(self, *args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/tensorflow/lite/python/lite.py", line 1792, in convert
    return super(TFLiteFrozenGraphConverterV2, self).convert(
  File "/usr/local/lib/python3.10/dist-packages/tensorflow/lite/python/lite.py", line 1371, in convert
    result = _convert_graphdef(
  File "/usr/local/lib/python3.10/dist-packages/tensorflow/lite/python/convert_phase.py", line 212, in wrapper
    raise converter_error from None  # Re-throws the exception.
  File "/usr/local/lib/python3.10/dist-packages/tensorflow/lite/python/convert_phase.py", line 205, in wrapper
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/tensorflow/lite/python/convert.py", line 985, in convert_graphdef
    data = convert(
  File "/usr/local/lib/python3.10/dist-packages/tensorflow/lite/python/convert.py", line 368, in convert
    return _run_deprecated_conversion_binary(
  File "/usr/local/lib/python3.10/dist-packages/tensorflow/lite/python/convert_phase.py", line 212, in wrapper
    raise converter_error from None  # Re-throws the exception.
  File "/usr/local/lib/python3.10/dist-packages/tensorflow/lite/python/convert_phase.py", line 205, in wrapper
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/tensorflow/lite/python/convert.py", line 482, in _run_deprecated_conversion_binary
    raise ConverterError("See console for info.\n%s\n%s\n" % (stdout, stderr))
tensorflow.lite.python.convert_phase.ConverterError: See console for info.
2023-12-19 13:16:03.380213: F tensorflow/lite/toco/graph_transformations/propagate_fixed_sizes.cc:1677] Check failed: op->start_indices.size() <= num_input_axes (6 vs. 3)StridedSlice op with output "model_14/tf.strided_slice_1/StridedSlice", requires no more than 3 start indices
Fatal Python error: Aborted

There are slice operators in my model:
![8df2c140-39f0-4b80-934e-9f6b15156a33](https://github.com/tensorflow/tensorflow/assets/40817806/351a947c-6f0c-424b-aa76-31daa18d1479)
But if I don't modify the convert.py, has no this error. This perhaps a bug, for my slice node start indices parameter is a one dimension tensor, and input feature map is 3-dim.
Then I remove th Slice node from my model, the convert execute successful, but the MatMul still convert to FullyConnected, even I set unfold_batch_matmul to false in onnx2tf.py
so, converter.experimental_use_mlir_converter = False is not work
 Hi @pkgoogle,

Please look into the  issue.

Thank You

 Hi @zxros10, currently there is no way to do the conversion w/o this optimization, why do you say that your device doesn't support fully connected well? > Hi @zxros10, currently there is no way to do the conversion w/o this optimization, why do you say that your device doesn't support fully connected well?

In my device, the FullyConnected will bring in reshap、transpose and expanddim operator node, which exhaust time close to FullyConnected compute time. I resolve in other way, so close this
### 1. System information

ubuntu22.04 
tensorflow 2.15

### 2. Code

import tensorflow as tf

import numpy as np
def representative_data_gen():
    input_value2 = np.random.normal(size=(1, 40, 20, 2048)).astype(np.float32)
    yield {
      "input_0": input_value2,
    }



converter = tf.lite.TFLiteConverter.from_saved_model('convpart2/saved_model/')
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = representative_data_gen
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_type = tf.int8

tflite_model_quant = converter.convert()

with open("convpart2_int8.tflite", 'wb') as f:
    f.write(tflite_model_quant)


### 3. Failure after conversion
In my model, The MatMul or MatMul+Add or MatMul+Add+Relu are fusion and transformed to FullyConnected. My device doesn't support FullyConnected very well. So I want keep the origin operator(MatMul, Add, Relu), how can I stop this fusion optimization ? 
Thanks


