Skip to content

MultiLogger

minnt.loggers.MultiLogger

Bases: BaseLogger

A logger that forwards all logging calls to multiple other loggers.

Source code in minnt/loggers/multi_logger.py
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
class MultiLogger(BaseLogger):
    """A logger that forwards all logging calls to multiple other loggers."""

    def __init__(self, loggers: Iterable[Logger]) -> None:
        """Initialize the multi-logger.

        Parameters:
          loggers: An iterable of loggers to forward the logging calls to.
        """
        self.loggers: list[Logger] = list(loggers)

    loggers: list[Logger]
    """The list of loggers to forward the logging calls to."""

    def close(self) -> None:
        for logger in self.loggers:
            logger.close()

    def log_audio(self, label: str, audio: AnyArray, sample_rate: int, epoch: int) -> Self:
        for logger in self.loggers:
            logger.log_audio(label, audio, sample_rate, epoch)
        return self

    def log_config(self, config: dict[str, Any], epoch: int) -> Self:
        for logger in self.loggers:
            logger.log_config(config, epoch)
        return self

    def log_figure(self, label: str, figure: Any, epoch: int, tight_layout: bool = True, close: bool = True) -> Self:
        import matplotlib.pyplot as plt
        for i, logger in enumerate(self.loggers):
            logger.log_figure(label, figure, epoch, tight_layout, False)
        close and plt.close(figure)
        return self

    def log_graph(self, graph: torch.nn.Module, data: TensorOrTensors, epoch: int) -> Self:
        for logger in self.loggers:
            logger.log_graph(graph, data, epoch)
        return self

    def log_image(self, label: str, image: AnyArray, epoch: int, data_format: DataFormat = "HWC") -> Self:
        for logger in self.loggers:
            logger.log_image(label, image, epoch, data_format)
        return self

    def log_metrics(self, logs: dict[str, float], epoch: int, description: str | None = None) -> Self:
        for logger in self.loggers:
            logger.log_metrics(logs, epoch, description)
        return self

    def log_text(self, label: str, text: str, epoch: int) -> Self:
        for logger in self.loggers:
            logger.log_text(label, text, epoch)
        return self

__init__

__init__(loggers: Iterable[Logger]) -> None

Initialize the multi-logger.

Parameters:

  • loggers (Iterable[Logger]) –

    An iterable of loggers to forward the logging calls to.

Source code in minnt/loggers/multi_logger.py
19
20
21
22
23
24
25
def __init__(self, loggers: Iterable[Logger]) -> None:
    """Initialize the multi-logger.

    Parameters:
      loggers: An iterable of loggers to forward the logging calls to.
    """
    self.loggers: list[Logger] = list(loggers)

loggers instance-attribute

loggers: list[Logger]

The list of loggers to forward the logging calls to.

close

close() -> None

Close the logger and release its resources.

Source code in minnt/loggers/multi_logger.py
30
31
32
def close(self) -> None:
    for logger in self.loggers:
        logger.close()

log_audio

log_audio(label: str, audio: AnyArray, sample_rate: int, epoch: int) -> Self

Log the given audio with the given label at the given epoch.

Parameters:

  • label (str) –

    The label of the logged audio.

  • audio (AnyArray) –

    The audio to log, represented as an array with any of the following shapes:

    • (L,) of (L, 1) for mono audio,
    • (L, 2) for stereo audio.

    If the sample values are floating-point numbers, they are expected to be in the [-1, 1] range; otherwise, they are assumed to be in the [-32_768, 32_767] range.

  • sample_rate (int) –

    The sample rate of the audio.

  • epoch (int) –

    The epoch number at which the audio is logged.

Source code in minnt/loggers/multi_logger.py
34
35
36
37
def log_audio(self, label: str, audio: AnyArray, sample_rate: int, epoch: int) -> Self:
    for logger in self.loggers:
        logger.log_audio(label, audio, sample_rate, epoch)
    return self

log_config

log_config(config: dict[str, Any], epoch: int) -> Self

Log the given configuration dictionary at the given epoch.

Parameters:

  • config (dict[str, Any]) –

    A JSON-serializable dictionary representing the configuration to log.

  • epoch (int) –

    The epoch number at which the configuration is logged.

Source code in minnt/loggers/multi_logger.py
39
40
41
42
def log_config(self, config: dict[str, Any], epoch: int) -> Self:
    for logger in self.loggers:
        logger.log_config(config, epoch)
    return self

log_figure

log_figure(
    label: str,
    figure: Any,
    epoch: int,
    tight_layout: bool = True,
    close: bool = True,
) -> Self

Log the given matplotlib Figure with the given label at the given epoch.

Parameters:

  • label (str) –

    The label of the logged image.

  • figure (Any) –

    A matplotlib Figure.

  • epoch (int) –

    The epoch number at which the image is logged.

  • tight_layout (bool, default: True ) –

    Whether to apply tight layout to the figure before logging it.

  • close (bool, default: True ) –

    Whether to close the figure after logging it.

Source code in minnt/loggers/multi_logger.py
44
45
46
47
48
49
def log_figure(self, label: str, figure: Any, epoch: int, tight_layout: bool = True, close: bool = True) -> Self:
    import matplotlib.pyplot as plt
    for i, logger in enumerate(self.loggers):
        logger.log_figure(label, figure, epoch, tight_layout, False)
    close and plt.close(figure)
    return self

log_graph

log_graph(graph: Module, data: TensorOrTensors, epoch: int) -> Self

Log the given computation graph by tracing it with the given data.

Alternatively, loggers may choose to log the graph using TorchScript, run it on the given data, or use any other mechanism they see fit.

Parameters:

  • graph (Module) –

    The computation graph to log, represented as a PyTorch module.

  • data (TensorOrTensors) –

    The input data to use for tracing the computation graph.

  • epoch (int) –

    The epoch number at which the computation graph is logged.

Source code in minnt/loggers/multi_logger.py
51
52
53
54
def log_graph(self, graph: torch.nn.Module, data: TensorOrTensors, epoch: int) -> Self:
    for logger in self.loggers:
        logger.log_graph(graph, data, epoch)
    return self

log_image

log_image(
    label: str, image: AnyArray, epoch: int, data_format: DataFormat = "HWC"
) -> Self

Log the given image with the given label at the given epoch.

Parameters:

  • label (str) –

    The label of the logged image.

  • image (AnyArray) –

    The image to log, represented as a PIL image or as an array of any of the following shapes (assuming "HWC" data format):

    • (H, W) or (H, W, 1) for grayscale images,
    • (H, W, 2) for grayscale images with alpha channel,
    • (H, W, 3) for RGB images,
    • (H, W, 4) for RGBA images.

    If the pixel values are floating-point numbers, they are expected to be in the [0, 1] range; otherwise, they are assumed to be in the [0, 255] range.

  • epoch (int) –

    The epoch number at which the image is logged.

  • data_format (DataFormat, default: 'HWC' ) –

    The data format of the image specifying whether the channels are stored in the last dimension ("HWC", the default) or in the first dimension ("CHW"); ignored for a PIL image.

Source code in minnt/loggers/multi_logger.py
56
57
58
59
def log_image(self, label: str, image: AnyArray, epoch: int, data_format: DataFormat = "HWC") -> Self:
    for logger in self.loggers:
        logger.log_image(label, image, epoch, data_format)
    return self

log_metrics

log_metrics(
    logs: dict[str, float], epoch: int, description: str | None = None
) -> Self

Log metrics collected during a given epoch, with an optional description.

Parameters:

  • logs (dict[str, float]) –

    A dictionary of logged metrics for the epoch.

  • epoch (int) –

    The epoch number at which the logs were collected.

  • description (str | None, default: None ) –

    An optional description of the logged metrics (used only by some loggers).

Source code in minnt/loggers/multi_logger.py
61
62
63
64
def log_metrics(self, logs: dict[str, float], epoch: int, description: str | None = None) -> Self:
    for logger in self.loggers:
        logger.log_metrics(logs, epoch, description)
    return self

log_text

log_text(label: str, text: str, epoch: int) -> Self

Log the given text with the given label at the given epoch.

Parameters:

  • label (str) –

    The label of the logged text.

  • text (str) –

    The text to log.

  • epoch (int) –

    The epoch number at which the text is logged.

Source code in minnt/loggers/multi_logger.py
66
67
68
69
def log_text(self, label: str, text: str, epoch: int) -> Self:
    for logger in self.loggers:
        logger.log_text(label, text, epoch)
    return self