InMemoryLogger (original) (raw)

Back to top

Edit this page

Toggle table of contents sidebar

class composer.loggers.InMemoryLogger[source]#

Logs metrics to dictionary objects that persist in memory throughout training.

Useful for collecting and plotting data inside notebooks.

Example usage:

from composer.loggers import InMemoryLogger from composer.trainer import Trainer logger = InMemoryLogger( ) trainer = Trainer( model=model, train_dataloader=train_dataloader, eval_dataloader=eval_dataloader, max_duration="1ep", optimizers=[optimizer], loggers=[logger] )

Get data from logger. If you are using multiple loggers, be sure to confirm

which index in trainer.logger.destinations contains your desired logger.

logged_data = trainer.logger.destinations[0].data

data#

Mapping of a logged key to a (Timestamp, logged value) tuple. This dictionary contains all logged data.

Type

dict[str, list[tuple[Timestamp, _Any_]]]

most_recent_values#

Mapping of a key to the most recent value for that key.

Type

dict[str, _Any_]

most_recent_timestamps#

Mapping of a key to theTimestamp of the last logging call for that key.

Type

dict[str, Timestamp]

hyperparameters#

Dictionary of all hyperparameters.

Type

dict[str, _Any_]

tables#

dictionary of table name to json table.

Type

dict[str, str]

get_timeseries(metric)[source]#

Returns logged data as dict containing values of a desired metric over time.

Parameters

metric (str) – Metric of interest. Must be present in self.data.keys().

Returns

timeseries (dict[str, Any]) – Dictionary in which one key is metric, and the associated value is a list of values of that metric. The remaining keys are each a unit of time, and the associated values are each a list of values of that time unit for the corresponding index of the metric. For example: >>> InMemoryLogger.get_timeseries(metric=”accuracy/val”) {“accuracy/val”: [31.2, 45.6, 59.3, 64.7, “epoch”: [1, 2, 3, 4, …], …], “batch”: [49, 98, 147, 196, …], …}

Example

import matplotlib.pyplot as plt

from composer.loggers import InMemoryLogger from composer.core.time import Time, Timestamp

in_mem_logger = InMemoryLogger() trainer = Trainer( model=model, train_dataloader=train_dataloader, eval_dataloader=eval_dataloader, max_duration="1ep", optimizers=[optimizer], loggers=[in_mem_logger] )

Populate the logger with data

for b in range(0,3): datapoint = b * 3 in_mem_logger.log_metrics({"accuracy/val": datapoint})

timeseries = in_mem_logger.get_timeseries("accuracy/val") plt.plot(timeseries["batch"], timeseries["accuracy/val"]) plt.xlabel("Batch") plt.ylabel("Validation Accuracy")