Task2:抽丝剥茧——降水预测baseline详解
原任务地址:https://datawhaler.feishu.cn/wiki/AloVwLxJ3ipNg2kWsKTcyGapnNe
Part1 精读baseline——如何针对降水预测问题搭建模型
回顾基础模型(baseline),我们可以将其构建和解决问题的过程分解为几个关键步骤:首先定义数据集和加载器以准备训练数据;接着构建模型框架,选择合适的网络结构;然后配置损失函数和优化器,设置训练周期并开始训练模型;训练完成后,进行模型的评估和参数保存;最后,使用训练好的模型对新数据进行预测和推理。这个过程涵盖了从数据准备到模型部署的整个机器学习项目周期。
1. 环境与库的安装
- 使用
pip install
命令在平台上安装所需的库。
2. 导入库和数据集配置
- 导入执行脚本所需的 Python 库。
- 设置数据集路径,包括特征数据
feature_path
和地面真实数据gt_path
。
3. 数据集定义
- 年份列表:创建一个包含所需年份(如 "2019", "2020", "2021")的列表。
- 预报时间点:创建一个包含预报时间点(1-72小时)的列表
fcst_steps
。 - Feature 类:
- 构造函数定义了特征数据的输入路径、年份、预测时间点。
get_features_paths
函数用于获取每个时间点的特征数据路径。get_fts
函数使用xarray
加载 CDF 数据,并选择特定的预测间隔。
- GT 类:
- 类似于 Feature 类,用于加载和处理地面真实数据。
4. 模型构建
- 定义模型类,继承自
nn.Module
。 - 在构造函数中定义网络层,例如一个卷积层,设置输入和输出通道数。
- 实现
forward
函数,进行数据的前向传播,包括数据维度的调整。
5. 模型训练
- 损失函数:通常对于回归任务,使用均方误差(MSE)损失函数。
- 优化器:使用 Adam 优化器,设置学习率。
- 训练循环:
- 外层循环遍历训练周期。
- 内层循环根据
DataLoader
的batchsize
进行批处理训练。
- 数据加载:将数据放到 GPU 上,与模型保持一致。
- 正向传播:输入数据到模型,计算输出和损失。
- 反向传播:清空梯度,计算损失的梯度,更新模型参数。
6. 模型推理
- 加载模型:加载训练好的模型权重。
- 推理模式:使用
model.eval()
将模型设置为推理模式。 - 测试数据加载:指定测试数据路径,加载
.pt
文件。 - 数据预测:使用模型进行预测,确保输入数据在 GPU 上。
- 输出保存:将预测结果保存,注意结果需要在 CPU 上。
7. 数据处理细节
- 使用
xarray
处理.nc
格式数据,包括选择时间维度和特征维度。 isel
方法用于选择特定索引的数据,sel
方法用于选择特定条件的数据。
8. 模型保存和加载
- 在训练过程中,使用适当的方法保存模型参数。
- 在推理阶段,加载保存的模型参数以进行预测。
9. 注意事项
- 确保模型和数据在 GPU 上运行以提高效率。
- 在每次反向传播前,使用
optimizer.zero_grad()
清空旧梯度。 - 推理时,输出数据需要保存在 CPU 上,以避免提交时出现错误。
Part2 伏羲大模型初探
论文原文:https://arxiv.org/pdf/2306.12873
Github:https://github.com/tpys/FuXi
伏羲(FuXi)模型是一个由复旦大学人工智能创新与孵化研究所的团队开发的全球天气预报系统。这个系统使用机器学习(ML)模型进行15天的全球天气预报,具有6小时的时间分辨率和0.25°的空间分辨率。以下是对伏羲模型的分析:
-
级联模型架构:通过串联针对不同预测时段(0-5天、5-10天、10-15天)优化的预训练模型,以减少长期预测中的累积误差。
-
高分辨率与长时效预测:提供15天的全球天气预报,具有6小时时间分辨率和0.25°空间分辨率,挑战了传统数值天气预报模型的性能。
-
数据集:使用39年的ECMWF ERA5再分析数据集进行训练,该数据集以高空间分辨率和时间分辨率著称。
-
模型性能:在15天预测中与ECMWF集合平均(EM)相当,特别是在10天以上的长期预测中显示出优越性。
-
集合预测:通过初始条件和模型参数的扰动生成集合预测,提供预测不确定性的估计。
-
未来方向:计划研究流依赖的初始条件扰动方法,以及将级联模型架构应用于亚季节天气预报。
-
资源可用性:相关的数据、代码和模型资源可通过提供的链接获取。
伏羲模型的出现标志着机器学习技术在天气预报领域的一个重要进展,展现了其在高分辨率和长时效预测方面的潜力。
Part3 时间序列分析入门
时间序列分析是统计学中的一个重要领域,它涉及到对时间序列数据进行建模、预测以及解释。以下是时间序列分析的一些基本概念和方法:
基本概念
- 时间序列:按照时间顺序排列的数据点,例如股票价格、气温记录等。
- 趋势(Trend):数据随时间推移呈现的长期上升或下降的倾向。
- 季节性(Seasonality):数据在一年或一个周期内重复出现的模式。
- 周期性(Cyclic):数据中存在的非固定周期的波动。
- 随机性(Irregularity):数据中的随机波动,通常由不可预测的因素引起。
探索性分析
- 图形分析:绘制时间序列图,观察趋势、季节性和周期性。
- 描述性统计:计算均值、方差、偏度和峰度等统计量。
模型分类
- 自回归模型(AR):模型当前值与之前值相关。
- 移动平均模型(MA):模型当前值与先前误差项相关。
- 自回归移动平均模型(ARMA):结合AR和MA的特点。
- 自回归积分滑动平均模型(ARIMA):适用于非平稳时间序列的模型。
- 季节性自回归积分滑动平均模型(SARIMA):考虑季节性因素的ARIMA模型。
模型建立
- 平稳性检验:如ADF检验,判断时间序列是否平稳。
- 自相关函数(ACF)和偏自相关函数(PACF):帮助识别合适的AR和MA模型阶数。
参数估计
- 使用最大似然估计或贝叶斯方法估计模型参数。
模型诊断
- 残差分析:检查残差是否为白噪声序列。
- 检验模型假设:如残差的独立性、正态性等。
预测
- 使用模型进行未来值的预测,并给出预测区间。
baseline的改写
接task 1,将训练模型的进行简要改写后模型在训练过程中的训练损失(train_loss)和验证损失(val_loss)随训练周期(Epoch)变化的情况如下图所示。
以下是对图像的分析:
-
损失下降趋势:从图像中可以看出,无论是训练损失还是验证损失,都随着训练周期的增加而逐渐减小,这表明模型在训练过程中逐渐学习并改善其性能。
-
收敛情况:损失值从0.85左右开始下降,训练损失和验证损失都趋于稳定在0.65以下。这可能意味着模型已经收敛到一个相对较好的性能状态。
-
过拟合迹象:通常,如果训练损失持续降低而验证损失在某个点之后开始增加,这可能是过拟合的迹象。但在这个图像中,训练损失和验证损失都持续下降,并没有出现明显的差距,表明模型没有明显的过拟合问题。
-
性能评估:最终,训练损失和验证损失都达到了0.60左右,可以认为模型在训练集和验证集上都获得了相似的性能,这通常是一个良好的信号,表示模型泛化能力较强。
-
进一步优化:尽管模型损失已经降低,但可能还有进一步优化的空间。例如,可以尝试使用更复杂的模型结构、调整超参数、使用正则化技术或增加训练数据等方法来提高模型性能。
-
训练周期:图像显示了12个训练周期的损失情况,实际中可能需要更多周期或者根据验证损失停止下降时提前结束训练。
-
可视化:图像本身是一个有效的工具,它帮助我们直观地理解模型训练过程中性能的变化情况。
总结来说,MetNet模型的训练损失和验证损失随着训练周期的增加呈现稳定下降趋势,两者均从0.85左右开始下降,训练损失逐渐降至0.60左右,而验证损失也表现出类似的下降模式,最终接近训练损失的水平。这表明模型在训练过程中学习效果良好,且没有明显的过拟合现象,因为验证损失并没有显著高于训练损失。
同时,训练损失和验证损失都在持续减少,表明模型性能在提升,应尝试加大训练的次数,以获得更佳的模型效果。