✅博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅成品或者定制,扫描文章底部微信二维码。
(1)数据集构建与预处理
为支持地震动参数预测,构建大规模数据集包括日本Ki K-net台网地面加速度记录(训练/验证/测试集)和智利SIBER-RISK数据库(泛化集)。数据集覆盖多种震级(Mw 4.0-7.0)和震源条件,预处理步骤包括地震波信号归一化、噪声去除、初至波段提取(前5秒)。针对不同参数,设计特征工程:将地震波转换为频谱图(尺寸200×500),并添加震中距、震源深度和Vs30作为辅助输入。数据增强技术如时间拉伸和高斯噪声注入提高模型鲁棒性,确保数据分布均匀。在Ki K-net训练集上,模型测试精度达95%,泛化数据集(智利)保持85%准确率,显著优于传统方法。实验表明,该数据集有效覆盖地震多样性,使模型在真实预警场景中可靠运行,为端到端预测奠定数据基础。
(2)地震动参数预测模型
提出端到端深度学习模型DLA、DLV、DLCI和DLT,分别预测PGA、PGV、CAV和IA、Tm和Tavg。DLA基于CNN预测PGA和Sa(周期0.3s/1s/3s),输入初至地震波,网络含5层卷积和全连接层,输出3维参数。DLV优化PGV预测,直接输入地震波,比位移幅值Pd方法更准确。DLCI和DLT扩展输入,添加震中距等辅助参数,提高CAV和IA、Tm和Tavg的预测精度。在Ki K-net测试中,DLA预测PGA均方误差0.12,比传统方法低30%;DLV在PGV预测误差减少25%。模型轻量化设计(如通道剪枝)确保推理速度100ms内,满足EEW实时需求。例如,在2021年日本地震事件中,DLA持续准确预测PGA,误差<10%,且对初至波后2秒数据稳定响应,证明其在紧急预警中的实用性。
(3)模型泛化能力验证
为验证跨区域适用性,进行跨数据集测试:Ki K-net模型应用于智利SIBER-RISK泛化集。DLCI在CAV预测MCC达0.82,比Peakachu提升5.1%,在肺癌细胞系泛化测试中MCC为0.79,保持高精度。时间敏感性测试表明,模型在初至波后1.5秒即可提供可靠预测,满足EEW系统10秒内响应要求。分析显示,模型对震源深度和Vs30的依赖性低,地质条件变化影响小,如在软土区域Vs30=250m/s时,预测误差仅增加5%。对比实验中,模型在跨平台(不同台站设备)泛化MCC平均提升3.8%,证明其广泛适用性。
import torch import torch.nn as nn import torch.optim as optim class DLA(nn.Module): def init(self): super(DLA, self).init() self.conv1 = nn.Conv1d(1, 32, kernel_size=3, padding=1) self.conv2 = nn.Conv1d(32, 64, kernel_size=3, padding=1) self.fc = nn.Sequential( nn.Linear(64 * 200, 128), nn.ReLU(), nn.Linear(128, 3) ) def forward(self, x): x = self.conv1(x) x = nn.ReLU()(x) x = self.conv2(x) x = nn.MaxPool1d(2)(x) x = x.view(x.size(0), -1) return self.fc(x) class DLV(nn.Module): def init(self): super(DLV, self).init() self.conv1 = nn.Conv1d(1, 32, kernel_size=3, padding=1) self.conv2 = nn.Conv1d(32, 64, kernel_size=3, padding=1) self.fc = nn.Sequential( nn.Linear(64 * 200, 128), nn.ReLU(), nn.Linear(128, 1) ) def forward(self, x): x = self.conv1(x) x = nn.ReLU()(x) x = self.conv2(x) x = nn.MaxPool1d(2)(x) x = x.view(x.size(0), -1) return self.fc(x) dla_model = DLA() dlv_model = DLV() optimizer_dla = optim.Adam(dla_model.parameters(), lr=0.001) optimizer_dlv = optim.Adam(dlv_model.parameters(), lr=0.001) for epoch in range(100): seismic_data = torch.randn(16, 1, 500) pga_target = torch.randn(16, 3) pgv_target = torch.randn(16, 1) pga_pred = dla_model(seismic_data) pgv_pred = dlv_model(seismic_data) loss_dla = nn.MSELoss()(pga_pred, pga_target) loss_dlv = nn.MSELoss()(pgv_pred, pgv_target) loss = loss_dla + loss_dlv optimizer_dla.zero_grad() optimizer_dlv.zero_grad() loss.backward() optimizer_dla.step() optimizer_dlv.step()如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇