524. G2Net Detecting Continuous Gravitational Waves | g2net-detecting-continuous-gravitational-waves
from scipy.stats import norm
def Fnormalize(X):
X /= X.sum(-2, keepdims=True)
return X
def Pnormalize(X):
n = np.prod(X.shape[-2:])
POS = min(int(n * 0.999), n - 10)
EXP = norm.ppf((POS + 1 - np.pi / 8) / (n - np.pi / 4 + 1))
scale = np.partition(X.flatten(), POS, -1)[POS]
X /= scale / EXP.astype(scale.dtype) ** 2
return X
def normalize(X):
X = (X[..., None].view(X.real.dtype) ** 2).sum(-1)
X = Fnormalize(X)
X = Pnormalize(X)
return X
这种数据归一化有着简单的理论背景。
Fnormalize:将复数输入转换为元素实部和虚部平方之和,将输入转换为 chi2 分布。
Pnormalize:进行缩放,使得正态分布中第 POS 大的数的平方等于数据中第 POS 大的数。
针对 chi2 分布来解释 Pnormalize 可能是个好主意,但由于该函数仅对输入进行缩放,我认为你会获得相似的性能。
在同一模型中,通过改变推理步骤的归一化技术,性能得到了提升。
| Private | Public | |
|---|---|---|
| 仅 Pnormalize | 0.766 | 0.739 |
| Fnormalize + Pnormalize | 0.770 | 0.751 |
在实现数据集采样代码之前,我阅读了 PyFstat 库代码并追踪了参数范围。然而,没有找到 psi 和 phi 的范围。
令人惊讶的是,在比赛结束前 5 天,我才在这里发现了正确的范围,模型性能随之提升。
设置 1(Gen1):
tstart: [630720013, 1861492413)
F0: [45, 600)
F1: 10 ^ truncnorm.isf(rng.uniform(), a=-100, b=3, loc=-15, scale=2)
Alpha: [0, 2pi)
Delta: [-pi/2, pi/2)
cosi: [-1, 1)
psi: [-1, 1)
phi: [-1, 1)
Tsft: 1800
SFTWindowType: "tukey"
SFTWindowBeta: 0.0001
设置 2(Gen2):
tstart: [630720013, 1861492413)
F0: [45, 600)
F1: 10 ^ truncnorm.isf(rng.uniform(), a=-100, b=3, loc=-15, scale=2)
Alpha: [0, 2pi)
Delta: [-pi/2, pi/2)
cosi: [-1, 1)
psi: [-pi/4, pi/4)
phi: [0, 2pi)
Tsft: 1800
SFTWindowType: "tukey"
SFTWindowBeta: 0.0001
| 验证集 ROCAUC | Private | Public | |
|---|---|---|---|
| exp/v0.2-1229-1 最佳验证 (Gen1) | 0.8569 | 0.761 | 0.747 |
| exp/v0.2-1229-1 最后一个 epoch (Gen1) | 0.7278 | ||
| exp/v0.2-1230-2 |