Source code for pytorch_lightning.loggers.csv_logs
# Copyright The PyTorch Lightning team.## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License."""CSV logger----------CSV logger for basic experiment logging that does not require opening ports"""importcsvimportloggingimportosfromargparseimportNamespacefromtypingimportAny,Dict,Optional,Unionimporttorchfrompytorch_lightning.core.savingimportsave_hparams_to_yamlfrompytorch_lightning.loggers.baseimportLightningLoggerBase,rank_zero_experimentfrompytorch_lightning.utilities.loggerimport_add_prefix,_convert_paramsfrompytorch_lightning.utilities.rank_zeroimportrank_zero_only,rank_zero_warnlog=logging.getLogger(__name__)
[docs]classExperimentWriter:r""" Experiment writer for CSVLogger. Currently supports to log hyperparameters and metrics in YAML and CSV format, respectively. Args: log_dir: Directory for the experiment logs """NAME_HPARAMS_FILE="hparams.yaml"NAME_METRICS_FILE="metrics.csv"def__init__(self,log_dir:str)->None:self.hparams={}self.metrics=[]self.log_dir=log_dirifos.path.exists(self.log_dir)andos.listdir(self.log_dir):rank_zero_warn(f"Experiment logs directory {self.log_dir} exists and is not empty."" Previous log files in this directory will be deleted when the new ones are saved!")os.makedirs(self.log_dir,exist_ok=True)self.metrics_file_path=os.path.join(self.log_dir,self.NAME_METRICS_FILE)
[docs]defsave(self)->None:"""Save recorded hparams and metrics into files."""hparams_file=os.path.join(self.log_dir,self.NAME_HPARAMS_FILE)save_hparams_to_yaml(hparams_file,self.hparams)ifnotself.metrics:returnlast_m={}forminself.metrics:last_m.update(m)metrics_keys=list(last_m.keys())withopen(self.metrics_file_path,"w",newline="")asf:writer=csv.DictWriter(f,fieldnames=metrics_keys)writer.writeheader()writer.writerows(self.metrics)
[docs]classCSVLogger(LightningLoggerBase):r""" Log to local file system in yaml and CSV format. Logs are saved to ``os.path.join(save_dir, name, version)``. Example: >>> from pytorch_lightning import Trainer >>> from pytorch_lightning.loggers import CSVLogger >>> logger = CSVLogger("logs", name="my_exp_name") >>> trainer = Trainer(logger=logger) Args: save_dir: Save directory name: Experiment name. Defaults to ``'default'``. version: Experiment version. If version is not specified the logger inspects the save directory for existing versions, then automatically assigns the next available version. prefix: A string to put at the beginning of metric keys. flush_logs_every_n_steps: How often to flush logs to disk (defaults to every 100 steps). """LOGGER_JOIN_CHAR="-"def__init__(self,save_dir:str,name:Optional[str]="lightning_logs",version:Optional[Union[int,str]]=None,prefix:str="",flush_logs_every_n_steps:int=100,):super().__init__()self._save_dir=save_dirself._name=nameor""self._version=versionself._prefix=prefixself._experiment=Noneself._flush_logs_every_n_steps=flush_logs_every_n_steps@propertydefroot_dir(self)->str:"""Parent directory for all checkpoint subdirectories. If the experiment name parameter is an empty string, no experiment subdirectory is used and the checkpoint will be saved in "save_dir/version" """returnos.path.join(self.save_dir,self.name)@propertydeflog_dir(self)->str:"""The log directory for this run. By default, it is named ``'version_${self.version}'`` but it can be overridden by passing a string value for the constructor's version parameter instead of ``None`` or an int. """# create a pseudo standard pathversion=self.versionifisinstance(self.version,str)elsef"version_{self.version}"log_dir=os.path.join(self.root_dir,version)returnlog_dir@propertydefsave_dir(self)->Optional[str]:"""The current directory where logs are saved. Returns: The path to current directory where logs are saved. """returnself._save_dir@property@rank_zero_experimentdefexperiment(self)->ExperimentWriter:r""" Actual ExperimentWriter object. To use ExperimentWriter features in your :class:`~pytorch_lightning.core.lightning.LightningModule` do the following. Example:: self.logger.experiment.some_experiment_writer_function() """ifself._experiment:returnself._experimentos.makedirs(self.root_dir,exist_ok=True)self._experiment=ExperimentWriter(log_dir=self.log_dir)returnself._experiment
@propertydefname(self)->str:"""Gets the name of the experiment. Returns: The name of the experiment. """returnself._name@propertydefversion(self)->int:"""Gets the version of the experiment. Returns: The version of the experiment if it is specified, else the next version. """ifself._versionisNone:self._version=self._get_next_version()returnself._versiondef_get_next_version(self):root_dir=self.root_dirifnotos.path.isdir(root_dir):log.warning("Missing logger folder: %s",root_dir)return0existing_versions=[]fordinos.listdir(root_dir):ifos.path.isdir(os.path.join(root_dir,d))andd.startswith("version_"):existing_versions.append(int(d.split("_")[1]))iflen(existing_versions)==0:return0returnmax(existing_versions)+1
To analyze traffic and optimize your experience, we serve cookies on this site. By clicking or navigating, you agree to allow our usage of cookies. Read PyTorch Lightning's Privacy Policy.