CoolFace
Datasetpublic

heidiXD/CEED

SeismicXM 单台震中距、反方位角与震级预测 该目录实现 5 类严格可比的 SeismicXM 实验: decoder:只训练新的三任务回归头; encoder_decoder:训练卷积/双向 LSTM 编码器与回归头; transformer_decoder:训练 Transformer、任务嵌入与回归头; encoder_transformer_decoder:加载预训练权重后全量微调; scratch:同一结构从零训练,先训练到 1,000 step,再从该权重继续到总计 20,000 step。 默认采用 SeismicXM middle(约 51M 参数)及其发布权重。前三个目标分别用 km、圆周角和震级的独立指标报告。方位角定义为台站指向震中的 back azimuth;CEED HDF5 中保存的 azimuth 是震中指向台站,因此标签加 180° 后取模。 数据与预处理 从 CEED/NC 年度 HDF5 中选 20,000 条训练波形、2,000 条验证波形和 2,000 条测试波形。… See the full description on the dataset page: https://huggingface.co/datasets/heidiXD/CEED.

sourceHugging Faceupdated 18d agoView on Hugging Face
0likes65downloads
Dataset Card

SeismicXM 单台震中距、反方位角与震级预测

该目录实现 5 类严格可比的 SeismicXM 实验:

  1. 1.decoder:只训练新的三任务回归头;
  2. 2.encoder_decoder:训练卷积/双向 LSTM 编码器与回归头;
  3. 3.transformer_decoder:训练 Transformer、任务嵌入与回归头;
  4. 4.encoder_transformer_decoder:加载预训练权重后全量微调;
  5. 5.scratch:同一结构从零训练,先训练到 1,000 step,再从该权重继续到总计 20,000 step。

默认采用 SeismicXM middle(约 51M 参数)及其发布权重。前三个目标分别用 km、圆周角和震级的独立指标报告。方位角定义为台站指向震中的 back azimuth;CEED HDF5 中保存的 azimuth 是震中指向台站,因此标签加 180° 后取模。

数据与预处理

  • 从 CEED/NC 年度 HDF5 中选 20,000 条训练波形、2,000 条验证波形和 2,000 条测试波形。
  • 按年份切分:倒数第二年验证、最后一年测试,其余年份训练,避免同一事件泄漏。
  • 每个事件最多选择 4 个台站,降低大事件的过度代表。
  • 取 8,192 点窗口,把首个 P 到时放在第 2,000 点。
  • 为兼容预训练,每个分量独立去均值和峰值归一化。
  • 另外保留 E/N/Z 的原始 RMS 与峰值(log10 后以训练集统计量标准化),否则归一化会抹掉震级所需的绝对幅值信息。
  • 方位角以 (sin θ, cos θ) 回归,评估使用圆周误差。

服务器运行

预期目录:

text
/home/yuzy/machinelearning/dist_mag_azi_estimation/
├── data/ceed/ceed_waveforms_nc/waveform_h5/*.h5
├── vendor/seismicxm/seismicxm/
├── vendor/seismicxm/ckpt/seismicxm.middle.pt
├── ceed_data.py
├── model.py
├── train.py
└── run_experiments.sh

先运行 5 个 1,000-step 实验。前四个微调实验由外层 timeout 控制在 30 分钟以内;第 5 个从零训练实验不设时间限制:

bash
cd /home/yuzy/machinelearning/dist_mag_azi_estimation
bash run_experiments.sh

如 1,000 step 均通过,再执行长训练。长训练从 scratch_1000/last.pt 继续,并训练到总计 20,000 step

bash
RUN_SHORT=0 RUN_LONG=1 bash run_experiments.sh

长训练不受 30 分钟限制;它不可能在与 1,000 step 相同的半小时内完成。

汇总测试集结果:

bash
python summarize.py

默认 summary.csv 只包含原始五个模型,不包含 smoke_decoder、临时的 scratch_20000_best_eval 或后续增强实验。 可使用 --run-set original-checkpoints--run-set azimuth--run-set all 生成其他口径;如需审计辅助运行,再加 --include-auxiliaryscratch_1000scratch_20000 是第 5 个模型在两个训练阶段的检查点,不是两个不同模型。

方位角增强实验

run_azimuth_enhancements.sh 在不覆盖原五组结果的前提下运行:

  1. 1.E/N/Z 共享尺度归一化;
  2. 2.非线性方位角 MLP 头;
  3. 3.sin(2θ)/cos(2θ) 方向轴辅助头;
  4. 4.Decoder 预热后解冻 Encoder,并使用分层学习率。

所有增强实验使用与原五组完全相同的 manifest 和测试集。

两张同型号 CUDA GPU 的完整后台流水线(前四组两两并行,scratch 顺序续训)由 run_cuda_pipeline.sh 执行。前四个 1,000-step 微调实验有独立的 30 分钟预算;第 5 个模型的 1,000-step 和 20,000-step 阶段均不限时。

时间预算的解释

1,000 step × batch size 20 = 20,000 次样本抽取,约等于一个训练集遍历。对前四个微调模型,脚本把训练截止时间设为 27 分钟,给最终验证、测试和权重落盘预留约 3 分钟;若 GPU 在该配置下无法完成 1,000 step,summary.json 会明确记录 time_limit 与实际完成 step。第 5 个从零训练模型传入 --max-minutes 0,且不经过外层 timeout

20,000-step 从零训练约为 1,000-step 的 20 倍计算量,应在前五组完成并确认指标正常后单独后台运行。