Skip to main content



  • Parameters

    • data (Dict[str, Union[str, float, bool, int, pandas.DataFrame, PIL.Image.Image, matplotlib.figure.Figure, module, pathlib.Path]]) -- A dictionary in which each key is a string tag (i.e. name/id). The value can have different types. See examples below for more details.
    • step (Optional[int**]) -- An optional integer that associates data with a particular step (epoch). This only takes effect it the logged data is to be associated with a model train (and not with a dataset build) and the data is a number.
  • Returns


  • Return type


Logs arbitrary data associated with a model train or a dataset build into Layer backend.

This function can only be run inside functions decorated with @model or @dataset. The logged data can then be discovered and analyzed through the Layer UI.

We support Python primitives, images, tables and plots to enable better experiment tracking and version comparison.

Python Primitives

You can log Python primitive types for your model train parameters, metrics or KPIs

Accepted Types: str, float, bool, int


You can log images to track inputs, outputs, detections, activations and more. We support JPEG and PNG formats.

Accepted Types: PIL.Image.Image, path.Path


You can track your metrics in detail with charts

Accepted Types: matplotlib.figure.Figure, matplotlib.pyplot, ModuleType (only for the matplotlib module, for convenience)


You can log dataframes to display and analyze your tabular data.

Accepted Types: pandas.DataFrame

import matplotlib.pyplot as plt
import pandas as pd
from layer
from layer.decorators import dataset, model

# Define a new function for dataset generation
def create_my_dataset():
data = [[1, "product1", 15], [2, "product2", 20], [3, "product3", 10]]
dataframe = pd.DataFrame(data, columns=["Id", "Product", "Price"])

t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2 * np.pi * t)
fig, ax = plt.subplots()

"my-str-tag": "any text",
"my-int-tag": 123, # any number
"foo-bool": True,
"some-sample-dataframe-tag": ..., # Pandas data frame
"some-local-image-file: Path.home() / "images/foo.png",
"some-matplot-lib-figure": fig, # You could alternatively just passed plt as well, and Layer would just get the current/active figure.

"another-tag": "you can call layer.log multiple times"

return dataframe

def create_my_model():
# everything that can be logged for a dataset (as shown above), can also be logged for a model too.

# In addition to those, if you have a multi-step (i.e. multi-epoch) algorithm, you can associate a metric with the step.
# These will be rendered on a graph inside the Layer UI.
for i in range(1000):
some_result, accuracy = some_algo(some_result)
"Model accuracy": accuracy,
}, step=i)