consec-model-weights / src /pl_callbacks.py
Harsha909's picture
Upload 47 files
6dc7c27 verified
Raw
History Blame Contribute Delete
3.4 kB
import os
from logging import getLogger
from typing import Dict, Any
import hydra
import pytorch_lightning as pl
import shutil
from pathlib import Path
from omegaconf import DictConfig
from pytorch_lightning.callbacks import ModelCheckpoint
from src.scripts.model.raganato_evaluate import raganato_evaluate
from src.sense_inventories import WordNetSenseInventory
logger = getLogger(__name__)
class ModelCheckpointWithBest(ModelCheckpoint):
CHECKPOINT_NAME_BEST = "best.ckpt"
def on_validation_end(self, trainer, pl_module):
super().on_validation_end(trainer, pl_module)
if self.best_model_path == "":
return
orig_best = Path(self.best_model_path)
shutil.copyfile(orig_best, orig_best.parent / self.CHECKPOINT_NAME_BEST)
class PredictorsRaganatoEvaluateCallback(pl.Callback):
def __init__(
self,
raganato_path: str,
wsd_framework_dir: str,
samples_generator: DictConfig,
predictors: Dict[str, DictConfig],
wordnet_sense_inventory: DictConfig,
prediction_params: Dict[Any, Any],
):
self.raganato_path = raganato_path
self.wsd_framework_dir = wsd_framework_dir
self.samples_generator = samples_generator
self.predictors = {k: hydra.utils.instantiate(v) for k, v in predictors.items()}
self.wordnet_sense_inventory = hydra.utils.instantiate(wordnet_sense_inventory)
self.prediction_params = prediction_params
def on_validation_epoch_start(self, trainer, pl_module):
logger.info("PredictorsRaganatoEvaluateCallback started")
pl_module.sense_extractor.evaluation_mode = True
for predictor_name, predictor in self.predictors.items():
logger.info(f"Doing {predictor_name}")
# evaluate and log
_, _, f1, _ = raganato_evaluate(
raganato_path=self.raganato_path,
wsd_framework_dir=self.wsd_framework_dir,
module=pl_module,
predictor=predictor,
wordnet_sense_inventory=self.wordnet_sense_inventory,
samples_generator=self.samples_generator,
prediction_params=self.prediction_params,
)
pl_module.log(f"{predictor_name}_f1", f1, prog_bar=True, on_step=False, on_epoch=True)
logger.info(f"{predictor_name}: {f1} f1")
pl_module.sense_extractor.evaluation_mode = False
if __name__ == "__main__":
import omegaconf
from src.utils.hydra import fix
# setup logging
import logging
logging.basicConfig(level=logging.INFO)
@hydra.main(config_path="../conf", config_name="root")
def main(conf: omegaconf.DictConfig) -> None:
fix(conf)
logger.info("log check")
# load module
from src.pl_modules import BasecPLModule
module = BasecPLModule.load_from_checkpoint(
fix("experiments/basec_deberta_large_directed/2021-04-05/09-05-39/checkpoints/best.ckpt")
)
module.to(0)
module.eval()
module.freeze()
for callback in conf.callbacks.callbacks:
callback = hydra.utils.instantiate(callback, _recursive_=False)
callback.on_validation_epoch_start(None, module)
main()