anhtld commited on
Commit
7d0f16a
·
verified ·
1 Parent(s): ed7442b

Auto-sync: 2026-06-28 01:00:39

Browse files
Files changed (1) hide show
  1. dovla_cil/training/trainer.py +35 -0
dovla_cil/training/trainer.py CHANGED
@@ -120,6 +120,11 @@ class DoVLATrainer:
120
  self.train_group_ids, self.val_group_ids = _split_group_ids(
121
  self.dataset.group_ids, val_fraction=config.val_fraction, seed=config.seed
122
  )
 
 
 
 
 
123
  self.device = self._resolve_device(config.device)
124
  self.model_config = DoVLAConfig(
125
  obs_dim=config.obs_dim,
@@ -163,6 +168,14 @@ class DoVLATrainer:
163
 
164
  def train(self) -> dict[str, Any]:
165
  write_json(self._resolved_config(), self.output_dir / "resolved_config.json")
 
 
 
 
 
 
 
 
166
  if torch is None:
167
  return self._train_without_torch()
168
 
@@ -556,6 +569,7 @@ class DoVLATrainer:
556
  payload["backbone_feature_cache"] = str(payload["backbone_feature_cache"])
557
  if payload["policy_target_map"] is not None:
558
  payload["policy_target_map"] = str(payload["policy_target_map"])
 
559
  return payload
560
 
561
  def _initialize_frozen_backbone_cache(self) -> None:
@@ -729,6 +743,27 @@ def _load_policy_target_map(path: str | Path | None) -> dict[str, str]:
729
  return output
730
 
731
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
732
  def _record_score(record: CILRecord) -> tuple[float, float, str]:
733
  rank_score = -float(record.rank_within_group) if record.rank_within_group is not None else 0.0
734
  return record.reward.score, rank_score, record.record_id
 
120
  self.train_group_ids, self.val_group_ids = _split_group_ids(
121
  self.dataset.group_ids, val_fraction=config.val_fraction, seed=config.seed
122
  )
123
+ self.policy_target_map_coverage = _policy_target_map_coverage(
124
+ self.policy_target_record_ids,
125
+ train_group_ids=self.train_group_ids,
126
+ val_group_ids=self.val_group_ids,
127
+ )
128
  self.device = self._resolve_device(config.device)
129
  self.model_config = DoVLAConfig(
130
  obs_dim=config.obs_dim,
 
168
 
169
  def train(self) -> dict[str, Any]:
170
  write_json(self._resolved_config(), self.output_dir / "resolved_config.json")
171
+ if self.policy_target_record_ids:
172
+ coverage = self.policy_target_map_coverage
173
+ print(
174
+ "policy_target_map_coverage "
175
+ "train={train_covered}/{train_groups} ({train_coverage:.1%}) "
176
+ "val={val_covered}/{val_groups} ({val_coverage:.1%}) "
177
+ "targets={num_targets}".format(**coverage)
178
+ )
179
  if torch is None:
180
  return self._train_without_torch()
181
 
 
569
  payload["backbone_feature_cache"] = str(payload["backbone_feature_cache"])
570
  if payload["policy_target_map"] is not None:
571
  payload["policy_target_map"] = str(payload["policy_target_map"])
572
+ payload["policy_target_map_coverage"] = self.policy_target_map_coverage
573
  return payload
574
 
575
  def _initialize_frozen_backbone_cache(self) -> None:
 
743
  return output
744
 
745
 
746
+ def _policy_target_map_coverage(
747
+ target_record_ids: dict[str, str],
748
+ *,
749
+ train_group_ids: list[str],
750
+ val_group_ids: list[str],
751
+ ) -> dict[str, float | int]:
752
+ train_covered = sum(1 for group_id in train_group_ids if group_id in target_record_ids)
753
+ val_covered = sum(1 for group_id in val_group_ids if group_id in target_record_ids)
754
+ train_groups = len(train_group_ids)
755
+ val_groups = len(val_group_ids)
756
+ return {
757
+ "num_targets": len(target_record_ids),
758
+ "train_groups": train_groups,
759
+ "train_covered": train_covered,
760
+ "train_coverage": train_covered / train_groups if train_groups else 0.0,
761
+ "val_groups": val_groups,
762
+ "val_covered": val_covered,
763
+ "val_coverage": val_covered / val_groups if val_groups else 0.0,
764
+ }
765
+
766
+
767
  def _record_score(record: CILRecord) -> tuple[float, float, str]:
768
  rank_score = -float(record.rank_within_group) if record.rank_within_group is not None else 0.0
769
  return record.reward.score, rank_score, record.record_id