diff --git a/pytorch_lightning/logging/__init__.py b/pytorch_lightning/logging/__init__.py index 26c13b2d..be48000d 100644 --- a/pytorch_lightning/logging/__init__.py +++ b/pytorch_lightning/logging/__init__.py @@ -77,25 +77,8 @@ from os import environ from .base import LightningLoggerBase, rank_zero_only from .tensorboard import TensorBoardLogger -all = [] +all = ['TensorBoardLogger'] -try: - from .test_tube import TestTubeLogger - all.append('TestTubeLogger') -except ImportError: - pass - -try: - from .mlflow import MLFlowLogger - all.append('MLFlowLogger') -except ImportError: - pass - -try: - from .wandb import WandbLogger - all.append('WandbLogger') -except ImportError: - pass try: # needed to prevent ImportError and duplicated logs. environ["COMET_DISABLE_AUTO_LOGGING"] = "1" @@ -105,10 +88,30 @@ try: except ImportError: del environ["COMET_DISABLE_AUTO_LOGGING"] +try: + from .mlflow import MLFlowLogger + all.append('MLFlowLogger') +except ImportError: + pass + try: from .neptune import NeptuneLogger all.append('NeptuneLogger') except ImportError: pass +try: + from .test_tube import TestTubeLogger + all.append('TestTubeLogger') +except ImportError: + pass + +try: + from .wandb import WandbLogger + all.append('WandbLogger') +except ImportError: + pass + + + __all__ = all diff --git a/pytorch_lightning/logging/comet.py b/pytorch_lightning/logging/comet.py index 3fe25418..81cb8940 100644 --- a/pytorch_lightning/logging/comet.py +++ b/pytorch_lightning/logging/comet.py @@ -1,12 +1,11 @@ """ -Log using `comet `_ - -Comet logger can be used in either online or offline mode. -To log in online mode, CometLogger requries an API key: - .. code-block:: python + # ------------------- + # ONLINE MODE + # ------------------- from pytorch_lightning.logging import CometLogger + # arguments made to CometLogger are passed on to the comet_ml.Experiment class comet_logger = CometLogger( api_key=os.environ["COMET_KEY"], @@ -17,10 +16,9 @@ To log in online mode, CometLogger requries an API key: ) trainer = Trainer(logger=comet_logger) -To log in offline mode, CometLogger requires a path to a local directory: - -.. code-block:: python - + # ------------------- + # OFFLINE MODE + # ------------------- from pytorch_lightning.logging import CometLogger # arguments made to CometLogger are passed on to the comet_ml.Experiment class comet_logger = CometLogger( @@ -71,18 +69,54 @@ logger = getLogger(__name__) class CometLogger(LightningLoggerBase): def __init__(self, api_key=None, save_dir=None, workspace=None, rest_api_key=None, project_name=None, experiment_name=None, **kwargs): - """Initialize a Comet.ml logger. + r""" + + Log using `comet `_. + Requires either an API Key (online mode) or a local directory path (offline mode) - :param str api_key: Required in online mode. API key, found on Comet.ml - :param str save_dir: Required in offline mode. The path for the directory to save local comet logs - :param str workspace: Optional. Name of workspace for this user - :param str project_name: Optional. Send your experiment to a specific project. - Otherwise will be sent to Uncategorized Experiments. - If project name does not already exists Comet.ml will create a new project. - :param str rest_api_key: Optional. Rest API key found in Comet.ml settings. - This is used to determine version number - :param str experiment_name: Optional. String representing the name for this particular experiment on Comet.ml + .. code-block:: python + + # ONLINE MODE + from pytorch_lightning.logging import CometLogger + + # arguments made to CometLogger are passed on to the comet_ml.Experiment class + comet_logger = CometLogger( + api_key=os.environ["COMET_KEY"], + workspace=os.environ["COMET_WORKSPACE"], # Optional + project_name="default_project", # Optional + rest_api_key=os.environ["COMET_REST_KEY"], # Optional + experiment_name="default" # Optional + ) + trainer = Trainer(logger=comet_logger) + + + .. code-block:: python + + # OFFLINE MODE + from pytorch_lightning.logging import CometLogger + + # arguments made to CometLogger are passed on to the comet_ml.Experiment class + comet_logger = CometLogger( + save_dir=".", + workspace=os.environ["COMET_WORKSPACE"], # Optional + project_name="default_project", # Optional + rest_api_key=os.environ["COMET_REST_KEY"], # Optional + experiment_name="default" # Optional + ) + trainer = Trainer(logger=comet_logger) + + Args: + api_key (str): Required in online mode. API key, found on Comet.ml + save_dir (str): Required in offline mode. The path for the directory to save local comet logs + workspace (str): Optional. Name of workspace for this user + project_name (str): Optional. Send your experiment to a specific project. + Otherwise will be sent to Uncategorized Experiments. + If project name does not already exists Comet.ml will create a new project. + rest_api_key (str): Optional. Rest API key found in Comet.ml settings. + This is used to determine version number + experiment_name (str): Optional. String representing the name for this particular experiment on Comet.ml + """ super().__init__() self._experiment = None @@ -124,6 +158,15 @@ class CometLogger(LightningLoggerBase): @property def experiment(self): + r""" + + Actual comet object. To use comet features do the following. + + Example:: + + self.logger.experiment.some_comet_function() + + """ if self._experiment is not None: return self._experiment diff --git a/pytorch_lightning/logging/mlflow.py b/pytorch_lightning/logging/mlflow.py index 5769693d..9a786db2 100644 --- a/pytorch_lightning/logging/mlflow.py +++ b/pytorch_lightning/logging/mlflow.py @@ -47,6 +47,15 @@ class MLFlowLogger(LightningLoggerBase): @property def experiment(self): + r""" + + Actual mlflow object. To use mlflow features do the following. + + Example:: + + self.logger.experiment.some_mlflow_function() + + """ return self._mlflow_client @property diff --git a/pytorch_lightning/logging/neptune.py b/pytorch_lightning/logging/neptune.py index 7ce9f1f1..6f4a1281 100644 --- a/pytorch_lightning/logging/neptune.py +++ b/pytorch_lightning/logging/neptune.py @@ -111,6 +111,16 @@ class NeptuneLogger(LightningLoggerBase): @property def experiment(self): + r""" + + Actual neptune object. To use neptune features do the following. + + Example:: + + self.logger.experiment.some_neptune_function() + + """ + if self._experiment is not None: return self._experiment else: diff --git a/pytorch_lightning/logging/tensorboard.py b/pytorch_lightning/logging/tensorboard.py index 85279ce7..e5f0d2e2 100644 --- a/pytorch_lightning/logging/tensorboard.py +++ b/pytorch_lightning/logging/tensorboard.py @@ -45,10 +45,15 @@ class TensorBoardLogger(LightningLoggerBase): @property def experiment(self): - """The underlying :class:`torch.utils.tensorboard.SummaryWriter`. + r""" - :rtype: torch.utils.tensorboard.SummaryWriter - """ + Actual tensorboard object. To use tensorboard features do the following. + + Example:: + + self.logger.experiment.some_tensorboard_function() + + """ if self._experiment is not None: return self._experiment diff --git a/pytorch_lightning/logging/test_tube.py b/pytorch_lightning/logging/test_tube.py index 73da794f..6144368f 100644 --- a/pytorch_lightning/logging/test_tube.py +++ b/pytorch_lightning/logging/test_tube.py @@ -55,6 +55,16 @@ class TestTubeLogger(LightningLoggerBase): @property def experiment(self): + r""" + + Actual test-tube object. To use test-tube features do the following. + + Example:: + + self.logger.experiment.some_test_tube_function() + + """ + if self._experiment is not None: return self._experiment diff --git a/pytorch_lightning/logging/wandb.py b/pytorch_lightning/logging/wandb.py index 6846f868..d076aad2 100644 --- a/pytorch_lightning/logging/wandb.py +++ b/pytorch_lightning/logging/wandb.py @@ -68,6 +68,15 @@ class WandbLogger(LightningLoggerBase): @property def experiment(self): + r""" + + Actual wandb object. To use wandb features do the following. + + Example:: + + self.logger.experiment.some_wandb_function() + + """ if self._experiment is None: if self._offline: os.environ["WANDB_MODE"] = "dryrun"