Source code for catalyst.loggers.console
from typing import Dict
from catalyst.core.logger import ILogger
def _format_metrics(dct: Dict):
return " | ".join([f"{k}: {float(dct[k])}" for k in sorted(dct.keys())])
[docs]class ConsoleLogger(ILogger):
"""Console logger for parameters and metrics.
Output the metric into the console during experiment.
Args:
log_hparams: boolean flag to print all hparams to the console (default: False)
log_loader_metrics: boolean flag to print loader metrics to the console (default: True)
log_epoch_metrics: boolean flag to print epoch metrics to the console (default: True)
.. note::
This logger is used by default by all Runners.
"""
def __init__(
self,
log_hparams: bool = False,
log_loader_metrics: bool = True,
log_epoch_metrics: bool = True,
):
super().__init__()
self._log_hparams = log_hparams
self._log_loader_metrics = log_loader_metrics
self._log_epoch_metrics = log_epoch_metrics
def log_metrics(
self,
metrics: Dict[str, float],
scope: str = None,
# experiment info
run_key: str = None,
global_epoch_step: int = 0,
global_batch_step: int = 0,
global_sample_step: int = 0,
# stage info
stage_key: str = None,
stage_epoch_len: int = 0,
stage_epoch_step: int = 0,
stage_batch_step: int = 0,
stage_sample_step: int = 0,
# loader info
loader_key: str = None,
loader_batch_len: int = 0,
loader_sample_len: int = 0,
loader_batch_step: int = 0,
loader_sample_step: int = 0,
) -> None:
"""Logs loader and epoch metrics to stdout."""
if scope == "loader" and self._log_loader_metrics:
prefix = f"{loader_key} ({stage_epoch_step}/{stage_epoch_len}) "
msg = prefix + _format_metrics(metrics)
print(msg)
elif scope == "epoch" and self._log_epoch_metrics:
# @TODO: trick to save pure epoch-based metrics, like lr/momentum
prefix = f"* Epoch ({stage_epoch_step}/{stage_epoch_len}) "
msg = prefix + _format_metrics(metrics["_epoch_"])
print(msg)
def log_hparams(
self,
hparams: Dict,
scope: str = None,
# experiment info
run_key: str = None,
stage_key: str = None,
) -> None:
"""Logs hyperparameters to the console.
Args:
hparams: Parameters to log.
scope: On which scope log parameters.
run_key: Experiment info.
stage_key: Stage info.
"""
if scope == "experiment" and self._log_hparams:
print(f"Hparams ({run_key}): {hparams}")
__all__ = ["ConsoleLogger"]