InMemoryLogger (original) (raw)
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
most_recent_timestamps#
Mapping of a key to theTimestamp of the last logging call for that key.
Type
hyperparameters#
Dictionary of all hyperparameters.
Type
tables#
dictionary of table name to json table.
Type
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")