Logging & Experiment Tracking ============================== PyTorch Lightning integrates with all major experiment tracking platforms. Built-in Loggers ---------------- CSVLogger ~~~~~~~~~ Writes metrics to a CSV file (default when no logger is specified): .. code-block:: python from lightning.pytorch.loggers import CSVLogger logger = CSVLogger(save_dir="logs/", name="mnist_experiment") trainer = Trainer(logger=logger) TensorBoardLogger ~~~~~~~~~~~~~~~~~ .. code-block:: python from lightning.pytorch.loggers import TensorBoardLogger logger = TensorBoardLogger( save_dir="tb_logs/", name="resnet50_imagenet", version="v1", log_graph=True, ) # Launch TensorBoard # tensorboard --logdir tb_logs/ Weights & Biases ~~~~~~~~~~~~~~~~ .. code-block:: python from lightning.pytorch.loggers import WandbLogger logger = WandbLogger( project="image-classification", name="resnet50-run-42", tags=["resnet", "imagenet"], log_model="all", # upload checkpoints to W&B Artifacts ) trainer = Trainer(logger=logger, max_epochs=100) MLflow ~~~~~~ .. code-block:: python from lightning.pytorch.loggers import MLFlowLogger logger = MLFlowLogger( experiment_name="lightning-demo", tracking_uri="http://mlflow-server:5000", run_name="experiment-001", ) Multiple Loggers ~~~~~~~~~~~~~~~~ .. code-block:: python from lightning.pytorch.loggers import WandbLogger, CSVLogger, TensorBoardLogger trainer = Trainer( logger=[ WandbLogger(project="my-project"), CSVLogger(save_dir="logs/"), TensorBoardLogger(save_dir="tb_logs/"), ] ) Custom Logger ------------- .. code-block:: python from lightning.pytorch.loggers import Logger from argparse import Namespace from typing import Dict, Optional, Union class MyCustomLogger(Logger): @property def name(self) -> str: return "MyCustomLogger" @property def version(self) -> Optional[Union[int, str]]: return "1.0" def log_hyperparams(self, params: Namespace, *args, **kwargs) -> None: print(f"Hyperparams: {vars(params)}") def log_metrics(self, metrics: Dict[str, float], step: Optional[int] = None): print(f"Step {step}: {metrics}") def save(self) -> None: pass def finalize(self, status: str) -> None: pass