CSVLogger: deduplicate epochs on resume (replace, not append duplicates)
On resume, the same epoch may be re-run. Now log_train/log_val remove existing entries for the same epoch before appending, preventing duplicate rows in train.csv/val.csv. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -288,14 +288,18 @@ class CSVLogger:
|
|||||||
)
|
)
|
||||||
|
|
||||||
def log_train(self, epoch: int, metrics: dict, lr: float, elapsed: float) -> None:
|
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}
|
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)
|
self.train_rows.append(row)
|
||||||
pd.DataFrame(self.train_rows).to_csv(self.log_dir / "train.csv", index=False)
|
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)
|
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:
|
def log_val(self, epoch: int, metrics: dict) -> None:
|
||||||
|
"""Log val metrics. Replaces existing entry for same epoch on resume."""
|
||||||
row = {"epoch": epoch, **metrics}
|
row = {"epoch": epoch, **metrics}
|
||||||
|
self.val_rows = [r for r in self.val_rows if r.get("epoch") != epoch]
|
||||||
self.val_rows.append(row)
|
self.val_rows.append(row)
|
||||||
pd.DataFrame(self.val_rows).to_csv(self.log_dir / "val.csv", index=False)
|
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)
|
pd.DataFrame([row]).to_csv(self.log_dir / f"epoch_{epoch:03d}_val.csv", index=False)
|
||||||
|
|||||||
Reference in New Issue
Block a user