diff --git a/src/training/train_gtauav.py b/src/training/train_gtauav.py index 9f8c8a1..66f215c 100644 --- a/src/training/train_gtauav.py +++ b/src/training/train_gtauav.py @@ -288,14 +288,18 @@ class CSVLogger: ) def log_train(self, epoch: int, metrics: dict, lr: float, elapsed: float) -> None: - """Log epoch-level train averages.""" + """Log epoch-level train averages. Replaces existing entry for same epoch on resume.""" row = {"epoch": epoch, "lr": lr, "elapsed_s": round(elapsed, 1), **metrics} + # Remove previous entry for this epoch (resume may re-run it). + self.train_rows = [r for r in self.train_rows if r.get("epoch") != epoch] self.train_rows.append(row) pd.DataFrame(self.train_rows).to_csv(self.log_dir / "train.csv", index=False) pd.DataFrame([row]).to_csv(self.log_dir / f"epoch_{epoch:03d}_train.csv", index=False) def log_val(self, epoch: int, metrics: dict) -> None: + """Log val metrics. Replaces existing entry for same epoch on resume.""" row = {"epoch": epoch, **metrics} + self.val_rows = [r for r in self.val_rows if r.get("epoch") != epoch] self.val_rows.append(row) pd.DataFrame(self.val_rows).to_csv(self.log_dir / "val.csv", index=False) pd.DataFrame([row]).to_csv(self.log_dir / f"epoch_{epoch:03d}_val.csv", index=False)