def on_validation_end(self, trainer: pl.Trainer, pl_module: pl.LightningModule): logger.info("***** Validation results *****") if pl_module.is_logger(): metrics = trainer.callback_metrics # Log results for key in sorted(metrics): if key not in ["log", "progress_bar"]: logger.info("{} = {}\n".format(key, str(metrics[key])))
def on_test_end(self, trainer: pl.Trainer, pl_module: pl.LightningModule): logger.info("***** Test results *****") if pl_module.is_logger(): metrics = trainer.callback_metrics # Log and save results to file output_test_results_file = os.path.join(pl_module.hparams.output_dir, "test_results.txt") with open(output_test_results_file, "w") as writer: for key in sorted(metrics): if key not in ["log", "progress_bar"]: logger.info("{} = {}\n".format(key, str(metrics[key]))) writer.write("{} = {}\n".format(key, str(metrics[key])))
def _write_logs(self, trainer: pl.Trainer, pl_module: pl.LightningModule, type_path: str, save_generations=True) -> None: logger.info( f"***** {type_path} results at step {trainer.global_step:05d} *****" ) if not pl_module.is_logger(): return metrics = trainer.callback_metrics trainer.logger.log_metrics({ k: v for k, v in metrics.items() if k not in ["log", "progress_bar", "preds"] }) # Log results od = Path(pl_module.hparams.output_dir) if type_path == "test": results_file = od / "test_results.txt" generations_file = od / "test_generations.txt" else: results_file = od / f"{type_path}_results_{trainer.global_step:05d}.txt" generations_file = od / f"{type_path}_generations_{trainer.global_step:05d}.txt" with open(results_file, "a+") as writer: for key in sorted(metrics): if key in ["log", "progress_bar", "preds"]: continue val = metrics[key] if isinstance(val, torch.Tensor): val = val.item() msg = f"{key}: {val:.6f}\n" writer.write(msg) if not save_generations: return if "preds" in metrics: content = "\n".join(metrics["preds"]) generations_file.open("w+").write(content)