.. _tensorflow-ref-neuron-analyze_model-api:

TensorFlow 2.x (``tensorflow-neuron``) analyze_model API
========================================================

Method
------

``tensorflow.neuron.analyze_model``

Description
-----------

Analyzes a ``keras.Model`` or a Python callable that can be decorated by
``tf.function`` for it's compatibility with Neuron. It displays supported 
vs. unsupported operators in the model as well as percentages and counts of 
each operator and returns a dictionary with operator statistics.

Arguments
---------

-   **func:** The ``keras.Model`` or function to be analyzed.
-   **example_inputs:** A ``tf.Tensor`` or a tuple/list/dict of
    ``tf.Tensor`` objects for tracing the function. When ``example_inputs``
    is a ``tf.Tensor`` or a list of ``tf.Tensor`` objects, we expect
    ``func`` to have calling signature ``func(example_inputs)``. Otherwise,
    the expectation is that inference on ``func`` is done by calling
    ``func(*example_inputs)`` when ``example_inputs`` is a ``tuple``,
    or ``func(**example_inputs)`` when ``example_inputs`` is a ``dict``.
    The case where ``func`` accepts mixed positional and keyword arguments
    is currently unsupported.

Returns
-------

-  A results ``dict`` with these keys: ``'percent_supported', 'supported_count', 
  'total_count', 'supported_operators', 'unsupported_operators', 'operators', 
  'operator_count'``.

Example Usage
-------------

.. code:: python

    import tensorflow as tf
    import tensorflow.neuron as tfn

    input0 = tf.keras.layers.Input(3)
    dense0 = tf.keras.layers.Dense(3)(input0)
    model = tf.keras.Model(inputs=[input0], outputs=[dense0])
    example_inputs = tf.random.uniform([1, 3])
    results = tfn.analyze_model(model, example_inputs)
    print(results)

    # expected output
    '''
    BiasAdd
	MatMul
	100.00% of all operations (2 of 2) are supported
	{'percent_supported': 100.0, 'supported_count': 2, 'total_count': 2, 
	'supported_operators': {'BiasAdd', 'MatMul'}, 'unsupported_operators': [], 
	'operators': ['BiasAdd', 'MatMul'], 'operator_count': {'MatMul': 1, 'BiasAdd': 1}}
	'''