Top Related Projects
Composable transformations of Python+NumPy programs: differentiate, vectorize, JIT to GPU/TPU, and more
Tensors and Dynamic neural networks in Python with strong GPU acceleration
ONNX Runtime: cross-platform, high performance ML inferencing and training accelerator
🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX.
scikit-learn: machine learning in Python
Open source platform for the machine learning lifecycle
Quick Overview
TensorFlow Model Analysis (TFMA) is an open-source library for evaluating TensorFlow models. It allows users to perform in-depth model analysis, compute evaluation metrics over slices of data, and visualize model performance. TFMA is particularly useful for understanding model behavior across different subgroups and identifying potential biases.
Pros
- Seamless integration with TensorFlow and TFX (TensorFlow Extended) ecosystem
- Supports large-scale, distributed evaluation of models
- Provides a wide range of customizable metrics and slicing options
- Offers interactive visualization tools for easy interpretation of results
Cons
- Steep learning curve for users not familiar with TensorFlow ecosystem
- Limited documentation and examples for advanced use cases
- Primarily focused on TensorFlow models, which may not be suitable for users of other frameworks
- Can be resource-intensive for very large datasets or complex models
Code Examples
- Basic model evaluation:
import tensorflow_model_analysis as tfma
eval_config = tfma.EvalConfig(
model_specs=[tfma.ModelSpec(name='my_model')],
metrics_specs=[tfma.MetricsSpec(metrics=[
tfma.MetricConfig(class_name='BinaryAccuracy'),
tfma.MetricConfig(class_name='AUC')
])]
)
eval_result = tfma.run_model_analysis(
eval_shared_model=eval_shared_model,
eval_config=eval_config,
data_location=data_location,
output_path=output_path
)
- Sliced evaluation:
slicing_specs = [
tfma.SlicingSpec(feature_keys=['gender']),
tfma.SlicingSpec(feature_keys=['age_group', 'gender'])
]
eval_config = tfma.EvalConfig(
model_specs=[tfma.ModelSpec(name='my_model')],
slicing_specs=slicing_specs,
metrics_specs=[tfma.MetricsSpec(metrics=[
tfma.MetricConfig(class_name='BinaryAccuracy'),
tfma.MetricConfig(class_name='AUC')
])]
)
- Visualizing results:
from tensorflow_model_analysis.addons.fairness.view import widget_view
widget_view.render_fairness_indicator(eval_result)
Getting Started
To get started with TensorFlow Model Analysis:
- Install TFMA:
pip install tensorflow-model-analysis
- Import the library and create an evaluation configuration:
import tensorflow_model_analysis as tfma
eval_config = tfma.EvalConfig(
model_specs=[tfma.ModelSpec(name='my_model')],
metrics_specs=[tfma.MetricsSpec(metrics=[
tfma.MetricConfig(class_name='BinaryAccuracy')
])]
)
- Run the analysis and view results:
eval_result = tfma.run_model_analysis(
eval_shared_model=eval_shared_model,
eval_config=eval_config,
data_location=data_location,
output_path=output_path
)
tfma.view.render_slicing_metrics(eval_result)
Competitor Comparisons
Composable transformations of Python+NumPy programs: differentiate, vectorize, JIT to GPU/TPU, and more
Pros of JAX
- More flexible and customizable for research and experimentation
- Better performance on accelerators like GPUs and TPUs
- Simpler API with functional programming paradigms
Cons of JAX
- Less mature ecosystem and fewer pre-built models/tools
- Steeper learning curve for those familiar with TensorFlow
- Limited support for production deployment compared to TensorFlow
Code Comparison
JAX example:
import jax.numpy as jnp
from jax import grad, jit
def loss(params, x, y):
return jnp.mean((params[0] * x + params[1] - y) ** 2)
grad_loss = jit(grad(loss))
TensorFlow Model Analysis example:
import tensorflow_model_analysis as tfma
eval_config = tfma.EvalConfig(
model_specs=[tfma.ModelSpec(name='my_model')],
metrics_specs=[tfma.MetricsSpec(metrics=[
tfma.MetricConfig(class_name='AUC'),
tfma.MetricConfig(class_name='Accuracy')
])]
)
JAX focuses on low-level numerical computing with automatic differentiation, while TensorFlow Model Analysis provides high-level tools for model evaluation and analysis. JAX offers more flexibility for custom implementations, whereas TensorFlow Model Analysis provides ready-to-use components for common ML workflows.
Tensors and Dynamic neural networks in Python with strong GPU acceleration
Pros of PyTorch
- More intuitive and Pythonic API, easier for beginners to learn
- Dynamic computational graphs allow for more flexible model architectures
- Stronger community support for research and experimentation
Cons of PyTorch
- Slower deployment in production environments compared to TensorFlow
- Fewer built-in tools for model analysis and evaluation
- Less extensive support for mobile and embedded devices
Code Comparison
PyTorch:
import torch
x = torch.tensor([1, 2, 3])
y = torch.tensor([4, 5, 6])
z = torch.matmul(x, y)
TensorFlow Model Analysis:
import tensorflow as tf
import tensorflow_model_analysis as tfma
eval_config = tfma.EvalConfig(model_specs=[tfma.ModelSpec()])
eval_results = tfma.run_model_analysis(eval_config)
While PyTorch focuses on creating and training models with a more flexible approach, TensorFlow Model Analysis provides specialized tools for evaluating and analyzing model performance. PyTorch's code is more straightforward for basic operations, while TensorFlow Model Analysis offers more comprehensive evaluation capabilities out of the box.
ONNX Runtime: cross-platform, high performance ML inferencing and training accelerator
Pros of ONNX Runtime
- Supports multiple frameworks (TensorFlow, PyTorch, etc.) and hardware accelerators
- Optimized for production deployment with focus on performance and efficiency
- Provides a unified API for inference across different platforms and devices
Cons of ONNX Runtime
- Primarily focused on inference, not model analysis or evaluation
- May require additional tools for comprehensive model analysis and metrics
- Less integrated with TensorFlow ecosystem for end-to-end ML workflows
Code Comparison
ONNX Runtime:
import onnxruntime as ort
session = ort.InferenceSession("model.onnx")
input_name = session.get_inputs()[0].name
output = session.run(None, {input_name: input_data})
TensorFlow Model Analysis:
import tensorflow_model_analysis as tfma
eval_config = tfma.EvalConfig(model_specs=[tfma.ModelSpec()])
eval_results = tfma.run_model_analysis(eval_config=eval_config,
data_location=data_location,
output_path=output_path)
Summary
ONNX Runtime excels in cross-framework inference and deployment optimization, while TensorFlow Model Analysis specializes in comprehensive model evaluation within the TensorFlow ecosystem. ONNX Runtime is better suited for production inference across various platforms, whereas TensorFlow Model Analysis offers more in-depth analysis and metrics for TensorFlow models.
🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX.
Pros of Transformers
- Broader support for various NLP tasks and models
- More active community and frequent updates
- Easier integration with PyTorch and TensorFlow
Cons of Transformers
- Less focused on model analysis and evaluation
- May require more setup for specific analysis tasks
- Potentially steeper learning curve for beginners
Code Comparison
Transformers:
from transformers import AutoModelForSequenceClassification, AutoTokenizer
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased")
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
inputs = tokenizer("Hello, world!", return_tensors="pt")
outputs = model(**inputs)
Model Analysis:
import tensorflow_model_analysis as tfma
eval_config = tfma.EvalConfig(
model_specs=[tfma.ModelSpec(name='my_model')],
metrics_specs=[tfma.MetricsSpec(metrics=[tfma.MetricConfig(class_name='AUC')])]
)
eval_result = tfma.run_model_analysis(eval_config=eval_config, ...)
The Transformers library is more versatile for NLP tasks, while Model Analysis focuses on model evaluation and analysis. Transformers offers easier model loading and inference, whereas Model Analysis provides specialized tools for assessing model performance and fairness.
scikit-learn: machine learning in Python
Pros of scikit-learn
- Broader range of machine learning algorithms and tools
- Simpler API and easier to use for beginners
- More extensive documentation and community support
Cons of scikit-learn
- Less optimized for large-scale distributed computing
- Limited support for deep learning models
- Fewer built-in model evaluation and analysis tools
Code Comparison
scikit-learn:
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
model = RandomForestClassifier()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
TensorFlow Model Analysis:
import tensorflow_model_analysis as tfma
eval_config = tfma.EvalConfig(model_specs=[tfma.ModelSpec(label_key='label')])
eval_result = tfma.run_model_analysis(eval_shared_model=eval_shared_model,
eval_config=eval_config,
data_location=data_location)
scikit-learn offers a more straightforward approach for basic machine learning tasks, while TensorFlow Model Analysis provides more advanced evaluation capabilities, especially for TensorFlow models and large-scale datasets.
Open source platform for the machine learning lifecycle
Pros of MLflow
- More versatile, supporting multiple ML frameworks (not just TensorFlow)
- Offers experiment tracking, model packaging, and deployment in one platform
- Active community with frequent updates and contributions
Cons of MLflow
- Less specialized for deep learning model analysis compared to TensorFlow Model Analysis
- May require more setup and configuration for specific use cases
- Potentially steeper learning curve for users familiar with TensorFlow ecosystem
Code Comparison
MLflow:
import mlflow
mlflow.start_run()
mlflow.log_param("param1", 5)
mlflow.log_metric("accuracy", 0.85)
mlflow.end_run()
TensorFlow Model Analysis:
import tensorflow_model_analysis as tfma
eval_config = tfma.EvalConfig(model_specs=[tfma.ModelSpec()])
eval_result = tfma.run_model_analysis(eval_config=eval_config)
tfma.view.render_slicing_metrics(eval_result)
MLflow provides a more general-purpose approach to experiment tracking and model management, while TensorFlow Model Analysis offers specialized tools for analyzing TensorFlow models. The choice between them depends on the specific requirements of your ML project and the frameworks you're using.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
TensorFlow Model Analysis
TensorFlow Model Analysis (TFMA) is a library for evaluating TensorFlow models. It allows users to evaluate their models on large amounts of data in a distributed manner, using the same metrics defined in their trainer. These metrics can be computed over different slices of data and visualized in Jupyter notebooks.
Caution: TFMA may introduce backwards incompatible changes before version 1.0.
Installation
The recommended way to install TFMA is using the PyPI package:
pip install tensorflow-model-analysis
pip install from https://pypi-nightly.tensorflow.org
pip install -i https://pypi-nightly.tensorflow.org/simple tensorflow-model-analysis
pip install from the HEAD of the git:
pip install git+https://github.com/tensorflow/model-analysis.git#egg=tensorflow_model_analysis
pip install from a released version directly from git:
pip install git+https://github.com/tensorflow/model-analysis.git@v0.21.3#egg=tensorflow_model_analysis
If you have cloned the repository locally, and want to test your local change, pip install from a local folder.
pip install -e $FOLDER_OF_THE_LOCAL_LOCATION
Note that protobuf must be installed correctly for the above option since it is building TFMA from source and it requires protoc and all of its includes reference-able. Please see protobuf install instruction for see the latest install instructions.
Currently, TFMA requires that TensorFlow is installed but does not have an explicit dependency on the TensorFlow PyPI package. See the TensorFlow install guides for instructions.
Build TFMA from source
To build from source follow the following steps:
Install the protoc as per the link mentioned: protoc
Create a virtual environment by running the commands
python3 -m venv <virtualenv_name>
source <virtualenv_name>/bin/activate
pip3 install setuptools wheel
git clone https://github.com/tensorflow/model-analysis.git
cd model-analysis
python3 setup.py bdist_wheel
This will build the TFMA wheel in the dist directory. To install the wheel from dist directory run the commands
cd dist
pip3 install tensorflow_model_analysis-<version>-py3-none-any.whl
Jupyter Lab
As of writing, because of https://github.com/pypa/pip/issues/9187, pip install
might never finish. In that case, you should revert pip to version 19 instead of
20: pip install "pip<20"
.
Using a JupyterLab extension requires installing dependencies on the command line. You can do this within the console in the JupyterLab UI or on the command line. This includes separately installing any pip package dependencies and JupyterLab labextension plugin dependencies, and the version numbers must be compatible. JupyterLab labextension packages refer to npm packages (eg, tensorflow_model_analysis.
The examples below use 0.32.0. Check available versions below to use the latest.
Jupyter Lab 3.0.x
pip install tensorflow_model_analysis==0.32.0
jupyter labextension install tensorflow_model_analysis@0.32.0
pip install jupyterlab_widgets==1.0.0
Jupyter Lab 2.2.x
pip install tensorflow_model_analysis==0.32.0
jupyter labextension install tensorflow_model_analysis@0.32.0
jupyter labextension install @jupyter-widgets/jupyterlab-manager@2
Jupyter Lab 1.2.x
pip install tensorflow_model_analysis==0.32.0
jupyter labextension install tensorflow_model_analysis@0.32.0
jupyter labextension install @jupyter-widgets/jupyterlab-manager@1.1
Classic Jupyter Notebook
To enable TFMA visualization in the classic Jupyter Notebook (either through
jupyter notebook
or
through the JupyterLab UI),
you'll also need to run:
jupyter nbextension enable --py widgetsnbextension
jupyter nbextension enable --py tensorflow_model_analysis
Note: If Jupyter notebook is already installed in your home directory, add
--user
to these commands. If Jupyter is installed as root, or using a virtual
environment, the parameter --sys-prefix
might be required.
Building TFMA from source
If you want to build TFMA from source and use the UI in JupyterLab, you'll need
to make sure that the source contains valid version numbers. Check that the
Python package version number and npm package version number are exactly the
same, and that both valid version numbers (eg, remove the -dev
suffix).
Troubleshooting
Check pip packages:
pip list
Check JupyterLab extensions:
jupyter labextension list # for JupyterLab
jupyter nbextension list # for classic Jupyter Notebook
Standalone HTML page with embed_minimal_html
TFMA notebook extension can be built into a standalone HTML file that also bundles data into the HTML file. See the Jupyter Widgets docs on embed_minimal_html.
Kubeflow Pipelines
Kubeflow Pipelines includes integrations that embed the TFMA notebook extension (code). This integration relies on network access at runtime to load a variant of the JavaScript build published on unpkg.com (see config and loader code).
Notable Dependencies
TensorFlow is required.
Apache Beam is required; it's the way that efficient distributed computation is supported. By default, Apache Beam runs in local mode but can also run in distributed mode using Google Cloud Dataflow and other Apache Beam runners.
Apache Arrow is also required. TFMA uses Arrow to represent data internally in order to make use of vectorized numpy functions.
Getting Started
For instructions on using TFMA, see the get started guide.
Compatible Versions
The following table is the TFMA package versions that are compatible with each other. This is determined by our testing framework, but other untested combinations may also work.
tensorflow-model-analysis | apache-beam[gcp] | pyarrow | tensorflow | tensorflow-metadata | tfx-bsl |
---|---|---|---|---|---|
GitHub master | 2.47.0 | 10.0.0 | nightly (2.x) | 1.15.0 | 1.15.1 |
0.46.0 | 2.47.0 | 10.0.0 | 2.15 | 1.15.0 | 1.15.1 |
0.45.0 | 2.47.0 | 10.0.0 | 2.13 | 1.14.0 | 1.14.0 |
0.44.0 | 2.40.0 | 6.0.0 | 2.12 | 1.13.1 | 1.13.0 |
0.43.0 | 2.40.0 | 6.0.0 | 2.11 | 1.12.0 | 1.12.0 |
0.42.0 | 2.40.0 | 6.0.0 | 1.15.5 / 2.10 | 1.11.0 | 1.11.1 |
0.41.0 | 2.40.0 | 6.0.0 | 1.15.5 / 2.9 | 1.10.0 | 1.10.1 |
0.40.0 | 2.38.0 | 5.0.0 | 1.15.5 / 2.9 | 1.9.0 | 1.9.0 |
0.39.0 | 2.38.0 | 5.0.0 | 1.15.5 / 2.8 | 1.8.0 | 1.8.0 |
0.38.0 | 2.36.0 | 5.0.0 | 1.15.5 / 2.8 | 1.7.0 | 1.7.0 |
0.37.0 | 2.35.0 | 5.0.0 | 1.15.5 / 2.7 | 1.6.0 | 1.6.0 |
0.36.0 | 2.34.0 | 5.0.0 | 1.15.5 / 2.7 | 1.5.0 | 1.5.0 |
0.35.0 | 2.33.0 | 5.0.0 | 1.15 / 2.6 | 1.4.0 | 1.4.0 |
0.34.1 | 2.32.0 | 2.0.0 | 1.15 / 2.6 | 1.2.0 | 1.3.0 |
0.34.0 | 2.31.0 | 2.0.0 | 1.15 / 2.6 | 1.2.0 | 1.3.1 |
0.33.0 | 2.31.0 | 2.0.0 | 1.15 / 2.5 | 1.2.0 | 1.2.0 |
0.32.1 | 2.29.0 | 2.0.0 | 1.15 / 2.5 | 1.1.0 | 1.1.1 |
0.32.0 | 2.29.0 | 2.0.0 | 1.15 / 2.5 | 1.1.0 | 1.1.0 |
0.31.0 | 2.29.0 | 2.0.0 | 1.15 / 2.5 | 1.0.0 | 1.0.0 |
0.30.0 | 2.28.0 | 2.0.0 | 1.15 / 2.4 | 0.30.0 | 0.30.0 |
0.29.0 | 2.28.0 | 2.0.0 | 1.15 / 2.4 | 0.29.0 | 0.29.0 |
0.28.0 | 2.28.0 | 2.0.0 | 1.15 / 2.4 | 0.28.0 | 0.28.0 |
0.27.0 | 2.27.0 | 2.0.0 | 1.15 / 2.4 | 0.27.0 | 0.27.0 |
0.26.1 | 2.28.0 | 0.17.0 | 1.15 / 2.3 | 0.26.0 | 0.26.0 |
0.26.0 | 2.25.0 | 0.17.0 | 1.15 / 2.3 | 0.26.0 | 0.26.0 |
0.25.0 | 2.25.0 | 0.17.0 | 1.15 / 2.3 | 0.25.0 | 0.25.0 |
0.24.3 | 2.24.0 | 0.17.0 | 1.15 / 2.3 | 0.24.0 | 0.24.1 |
0.24.2 | 2.23.0 | 0.17.0 | 1.15 / 2.3 | 0.24.0 | 0.24.0 |
0.24.1 | 2.23.0 | 0.17.0 | 1.15 / 2.3 | 0.24.0 | 0.24.0 |
0.24.0 | 2.23.0 | 0.17.0 | 1.15 / 2.3 | 0.24.0 | 0.24.0 |
0.23.0 | 2.23.0 | 0.17.0 | 1.15 / 2.3 | 0.23.0 | 0.23.0 |
0.22.2 | 2.20.0 | 0.16.0 | 1.15 / 2.2 | 0.22.2 | 0.22.0 |
0.22.1 | 2.20.0 | 0.16.0 | 1.15 / 2.2 | 0.22.2 | 0.22.0 |
0.22.0 | 2.20.0 | 0.16.0 | 1.15 / 2.2 | 0.22.0 | 0.22.0 |
0.21.6 | 2.19.0 | 0.15.0 | 1.15 / 2.1 | 0.21.0 | 0.21.3 |
0.21.5 | 2.19.0 | 0.15.0 | 1.15 / 2.1 | 0.21.0 | 0.21.3 |
0.21.4 | 2.19.0 | 0.15.0 | 1.15 / 2.1 | 0.21.0 | 0.21.3 |
0.21.3 | 2.17.0 | 0.15.0 | 1.15 / 2.1 | 0.21.0 | 0.21.0 |
0.21.2 | 2.17.0 | 0.15.0 | 1.15 / 2.1 | 0.21.0 | 0.21.0 |
0.21.1 | 2.17.0 | 0.15.0 | 1.15 / 2.1 | 0.21.0 | 0.21.0 |
0.21.0 | 2.17.0 | 0.15.0 | 1.15 / 2.1 | 0.21.0 | 0.21.0 |
0.15.4 | 2.16.0 | 0.15.0 | 1.15 / 2.0 | n/a | 0.15.1 |
0.15.3 | 2.16.0 | 0.15.0 | 1.15 / 2.0 | n/a | 0.15.1 |
0.15.2 | 2.16.0 | 0.15.0 | 1.15 / 2.0 | n/a | 0.15.1 |
0.15.1 | 2.16.0 | 0.15.0 | 1.15 / 2.0 | n/a | 0.15.0 |
0.15.0 | 2.16.0 | 0.15.0 | 1.15 | n/a | n/a |
0.14.0 | 2.14.0 | n/a | 1.14 | n/a | n/a |
0.13.1 | 2.11.0 | n/a | 1.13 | n/a | n/a |
0.13.0 | 2.11.0 | n/a | 1.13 | n/a | n/a |
0.12.1 | 2.10.0 | n/a | 1.12 | n/a | n/a |
0.12.0 | 2.10.0 | n/a | 1.12 | n/a | n/a |
0.11.0 | 2.8.0 | n/a | 1.11 | n/a | n/a |
0.9.2 | 2.6.0 | n/a | 1.9 | n/a | n/a |
0.9.1 | 2.6.0 | n/a | 1.10 | n/a | n/a |
0.9.0 | 2.5.0 | n/a | 1.9 | n/a | n/a |
0.6.0 | 2.4.0 | n/a | 1.6 | n/a | n/a |
Questions
Please direct any questions about working with TFMA to Stack Overflow using the tensorflow-model-analysis tag.
Top Related Projects
Composable transformations of Python+NumPy programs: differentiate, vectorize, JIT to GPU/TPU, and more
Tensors and Dynamic neural networks in Python with strong GPU acceleration
ONNX Runtime: cross-platform, high performance ML inferencing and training accelerator
🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX.
scikit-learn: machine learning in Python
Open source platform for the machine learning lifecycle
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot