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])))
Exemple #3
0
    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)