Download tests/debug_ext2.py from logos42/headless: direct link, hf CLI and curl.
- Browser
- Download file 2.01 kB
-
https://huggingface.co/logos42/headless/resolve/main/tests/debug_ext2.py
- Command line
-
hf download hf://logos42/headless/tests/debug_ext2.py
-
curl -L -o debug_ext2.py https://huggingface.co/logos42/headless/resolve/main/tests/debug_ext2.py
2.01 kB
| #!/usr/bin/env python3 | |
| """检验 external_test 的构造: 未训练模型在 6 个域上应各得 ~1/6, 不应全 1.0。""" | |
| import sys | |
| import numpy as np | |
| import torch | |
| sys.path.insert(0, "/work/liuyuanjie/headless") | |
| sys.path.insert(0, "/work/liuyuanjie/headless/tests") | |
| from run_lm4_wave import (build_feature_matrix, build_windows, assign_domains, | |
| evaluate, StatMLP) | |
| t1, d1, F1, ok1 = build_feature_matrix("/work/liuyuanjie/headless/data/wave", | |
| bands=13, use_wfr=True, use_lshell=True) | |
| X1, yl1 = build_windows(t1, d1, F1, ok1) | |
| y1, qs = assign_domains(yl1, 6) | |
| t2, d2, F2, ok2 = build_feature_matrix("/work/liuyuanjie/headless/data/wave2016", | |
| bands=13, use_wfr=True, use_lshell=True) | |
| X2, yl2 = build_windows(t2, d2, F2, ok2) | |
| y2, _ = assign_domains(yl2, 6, qs=qs) | |
| print("2016 每域样本:", np.bincount(y2, minlength=6).tolist()) | |
| dev = torch.device("cpu") | |
| ext = {} | |
| for dd in range(6): | |
| idx = np.where(y2 == dd)[0] | |
| _X = torch.from_numpy(X2[idx].astype(np.float32)) | |
| _y = torch.from_numpy(y2[idx]) | |
| ext[dd] = torch.utils.data.DataLoader( | |
| torch.utils.data.TensorDataset(_X, _y), batch_size=512) | |
| torch.manual_seed(0) | |
| m = StatMLP(n_feat=X1.shape[-1], n_classes=6, hidden=64, n_layers=2, | |
| head_type="linear", norm="fixed") | |
| m.eval() | |
| print("\n未训练模型在各域外部测试集上的准确率 (应各 ~0.167):") | |
| for dd in range(6): | |
| a = evaluate(m, ext[dd], dev) | |
| print(f" D{dd}: {a:.4f} (该域样本 {len(ext[dd].dataset)})") | |
| # 再看一个常数预测器 (全判 5) 的表现 | |
| class Const(torch.nn.Module): | |
| def __init__(self, c): super().__init__(); self.c = c | |
| def forward(self, x, agg=None): | |
| return torch.zeros(x.shape[0], 6).scatter_(1, torch.full((x.shape[0],1), self.c), 10.0) | |
| cm = Const(5) | |
| print("\n常数预测器 (全判 D5) 的表现 (D5 应 1.0, 其余 0.0):") | |
| for dd in range(6): | |
| print(f" D{dd}: {evaluate(cm, ext[dd], dev):.4f}") | |