fix(actpred): 修复归一化统计不一致等 5 项问题并增强可复现性
- train/val 归一化统计量改为仅用训练集计算并落盘复用,修复 val loss 不可信 - predict.py 统计文件路径改用 os.path 处理,修复跨平台与无分隔符路径问题 - dataset.py jpg/png 混合时统一按文件名排序,保证时间顺序 - 新增 --seed 全局随机种子(含 DataLoader generator),训练可复现 - 新增 --max-grad-norm 梯度裁剪(默认 1.0),防 GRU 梯度爆炸 - get_episode_count 与数据集目录过滤条件对齐,避免无效目录导致索引错位 - 空验证集返回 inf 并保底保存最终权重,避免伪造 best 模型 - 清理 export_onnx.py 重复分支死代码
This commit is contained in:
1 parent
85e5a4a054
commit
73b72d6889
5 files changed
+58
-18
No files matched your search
+10
-3
@@ -35,7 +35,8 @@ class ActionDataset(Dataset):
|
||||
continue
|
||||
actions = np.load(actions_path).astype(np.float32)
|
||||
n_frames = len(actions)
|
||||
image_files = sorted(images_dir.glob("*.jpg")) + sorted(images_dir.glob("*.png"))
|
||||
image_files = sorted(list(images_dir.glob("*.jpg")) + list(images_dir.glob("*.png")),
|
||||
key=lambda p: p.name)
|
||||
n_images = len(image_files)
|
||||
n = min(n_frames, n_images)
|
||||
for t in range(history_len, n):
|
||||
@@ -73,9 +74,15 @@ class ActionDataset(Dataset):
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def get_episode_count(data_dir: str) -> int:
|
||||
def _valid_episode_dirs(data_dir: str) -> list:
|
||||
data_path = Path(data_dir)
|
||||
return len([d for d in data_path.iterdir() if d.is_dir()])
|
||||
return sorted([d for d in data_path.iterdir()
|
||||
if d.is_dir() and (d / "actions.npy").exists() and (d / "images").is_dir()])
|
||||
|
||||
@staticmethod
|
||||
def get_episode_count(data_dir: str) -> int:
|
||||
# 与 __init__ 的过滤条件保持一致,避免 split_episodes 索引错位
|
||||
return len(ActionDataset._valid_episode_dirs(data_dir))
|
||||
|
||||
|
||||
class DataRecorder:
|
||||
|
||||
Reference in new issue
Block a user