Easily compose a model ensemble from your machine learning models
Project description
Model Composer
Motivation
This use-case prompted the development of model-composer
:
- You have two tensorflow models, one trained on weekday data and one trained on weekend data
- You would like to compose a single tensorflow model that can be used to generate predictions for any day of the week.
- You want the composed model to be natively defined in tensorflow - i.e. a single "computational graph" that can be easily loaded and used to make predictions.
- You want a single composed model becasuse:
- It is easier to maintain than having to implement the logic to compose the models in every service that needs to make predictions.
- It ensures the performance of the composed model will remain consistent with a native tensorflow model of a similar complexity.
- It is easier to deploy a single model than multiple models
Documentation
The official documentation is hosted on ReadTheDocs: https://model-composer.readthedocs.io/
Install
Using pip:
pip install model-composer
Extras
Make use of extras to install the model composer implementations that you need:
pip install model-composer[tensorflow] # compose tensorflow models
pip install model-composer[cloudpathlib] # load models from cloud storage
pip install model-composer[all] # all extras
Quick start
Declare your composed model in a yaml file which defines the components and how they should be composed.
name: "ride_share_pricing"
components:
- name: weekday_model
path: weekday_model.tf
type: tensorflow
where:
input: is_weekday
operator: eq
value: true
- name: weekend_model
path: weekend_model.tf
type: tensorflow
where:
input: is_weekday
operator: eq
value: false
Each component needs to have the following properties:
name
: The name of the component modelpath
: The path to the component model on disktype
: The type of the component model.where
: The condition at which the component model should be used.
We build the weekend model and save it to disk.
import tensorflow as tf
# Build the weekend model
weekend_model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(1,), name="distance"),
tf.keras.layers.Dense(1, name="price")
])
weekend_model.compile(optimizer="adam", loss="mse")
weekend_model.fit(
x={"distance": tf.convert_to_tensor([10, 20], dtype=tf.float32)},
y=tf.convert_to_tensor([10, 20], dtype=tf.float32),
epochs=10
)
weekend_model.save("weekend_model.tf")
We build the weekday model and save it to disk.
# Build the weekday model
weekday_model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(1,), name="distance"),
tf.keras.layers.Dense(1, name="price")
])
weekday_model.compile(optimizer="adam", loss="mse")
weekday_model.fit(
x={"distance": tf.convert_to_tensor([10, 20], dtype=tf.float32)},
y=tf.convert_to_tensor([5, 10], dtype=tf.float32),
epochs=10
)
# Save the models
weekday_model.save("weekday_model.tf")
We can now build our composed model from the example yaml spec.
import tensorflow as tf
from model_composer import TensorflowModelComposer
composed_model = TensorflowModelComposer().from_yaml("example.yaml")
assert isinstance(composed_model, tf.keras.Model)
composed_model.save("composed_model.tf")
loaded_model = tf.keras.models.load_model("composed_model.tf")
composed_model.predict({
"is_weekday": tf.convert_to_tensor([True, False], dtype=tf.bool),
"distance": tf.convert_to_tensor([10, 20], dtype=tf.float32)
})
Roadmap
- Support for more ML frameworks:
- PyTorch
- Scikit-learn
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file model_composer-0.3.0-py3-none-any.whl
.
File metadata
- Download URL: model_composer-0.3.0-py3-none-any.whl
- Upload date:
- Size: 11.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.5.0 CPython/3.8.7 Darwin/22.5.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 088c80242de963d1f781b34487c727ec546cf648d79ce5ea2ff234c1e50a80a7 |
|
MD5 | 365e344569e45f9d5cd22769fba437bd |
|
BLAKE2b-256 | f021c9bc04ff94bd1b1473c28deec523154e06621ee036774fbeb26d8b07e6dd |