PaddleX 提供了丰富的模型产线,模型产线由一个或多个模型组合实现,每个模型产线都能够解决特定的场景任务问题。PaddleX 所提供的模型产线均支持快速体验,如果效果不及预期,也同样支持使用私有数据微调模型,并且 PaddleX 提供了 Python API,方便将产线集成到个人项目中。在使用之前,您首先需要安装 PaddleX, 安装方式请参考 PaddleX本地安装教程。此处以一个用电量长期预测的任务为例子,介绍时序预测模型产线工具的使用流程。
首先,需要根据您的任务场景,选择对应的 PaddleX 产线,本任务目标是基于历史数据对未来一段时间电力消耗量进行预测。了解到这个任务属于时序预测任务,对应 PaddleX 的时序预测产线。如果无法确定任务和产线的对应关系,您可以在 PaddleX 支持的 PaddleX产线列表(CPU/GPU) 中了解相关产线的能力介绍。
PaddleX 提供了两种体验的方式,一种是可以直接通过 PaddleX 在本地体验,另外一种是可以在 AI Studio 星河社区 上体验。
本地体验方式:
from paddlex import create_model
model = create_model("DLinear")
output = model.predict("https://paddle-model-ecology.bj.bcebos.com/paddlex/ts/demo_ts/ts_fc.csv", batch_size=1)
for res in output:
res.print(json_format=False)
res.save_to_csv("./output/")
星河社区体验方式:可以进入 官方时序预测应用 体验时序预测任务的能力。 注:由于时序数据和场景紧密相关,时序任务的在线体验官方内置模型仅是在一个特定场景下的模型方案,并非通用方案,不适用其他场景,因此体验方式不支持使用任意的文件来体验官方模型方案效果。但是,在完成自己场景数据下的模型训练之后,可以选择自己训练的模型方案,并使用对应场景的数据进行在线体验。
PaddleX 提供了5个端到端的时序预测模型,具体可参考 模型列表,其中模型的benchmark如下:
| 模型名称 | mse | mae | 模型存储大小(M) | 介绍 |
|---|---|---|---|---|
| DLinear | 0.382 | 0.394 | 76k | DLinear结构简单,效率高且易用的时序预测模型 |
| Nonstationary | 0.600 | 0.515 | 60.3M | 基于transformer结构,针对性优化非平稳时间序列的长时序预测模型 |
| PatchTST | 0.385 | 0.397 | 2.2M | PatchTST是兼顾局部模式和全局依赖关系的高精度长时序预测模型 |
| TiDE | 0.405 | 0.412 | 34.9M | TiDE是适用于处理多变量、长期的时间序列预测问题的高精度模型 |
| TimesNet | 0.417 | 0.431 | 5.2M | 通过多周期分析,TimesNet是适应性强的高精度时间序列分析模型 |
你可以依据自己的实际使用场景,判断并选择一个合适的模型做训练,训练完成后可在产线内评估合适的模型权重,并最终用于实际使用场景中。
为了演示时序预测任务整个流程,我们将使用电力 Electricity 数据集进行模型训练及验证。该数据集采集了 2012 - 2014 年的某节点耗电量,每间距 1 小时采集一次数据,每个数据点由当前时间点和对应的耗电量组成。该数据集通常用于测试和验证时间序列预测模型的性能。
本教程中基于该数据集预测未来 96 小时的耗电量。我们已经将该数据集转化为标准数据格式,可通过以下命令获取示例数据集。关于数据格式介绍,您可以参考 时序预测模块开发教程。
数据集获取命令:
cd /path/to/paddlex
wget https://paddle-model-ecology.bj.bcebos.com/paddlex/PaddleX3.0/doc_images/practical_tutorial/timeseries_forecast/electricity.tar -P ./dataset
tar -xf ./dataset/electricity.tar -C ./dataset/
数据注意事项
非重复性:保证数据是按照时间顺序按行收集的,同一个时间点不能重复出现。
在对数据集校验时,只需一行命令:
python main.py -c paddlex/configs/modules/ts_forecast/DLinear.yaml \
-o Global.mode=check_dataset \
-o Global.dataset_dir=./dataset/electricity
执行上述命令后,PaddleX 会对数据集进行校验,并统计数据集的基本信息。命令运行成功后会在 log 中打印出 Check dataset passed ! 信息,同时相关产出会保存在当前目录的 ./output/check_dataset 目录下,产出目录中包括示例数据行。校验结果文件保存在 ./output/check_dataset_result.json,校验结果文件具体内容为
{
"done_flag": true,
"check_pass": true,
"attributes": {
"train_samples": 22880,
"train_table": [
[
"date",
"OT"
],
[
"2012-01-01 00:00:00",
2162.0
],
[
"2012-01-01 01:00:00",
2835.0
],
[
"2012-01-01 02:00:00",
2764.0
],
[
"2012-01-01 03:00:00",
2735.0
],
[
"2012-01-01 04:00:00",
2721.0
],
[
"2012-01-01 05:00:00",
2742.0
],
[
"2012-01-01 06:00:00",
2716.0
],
[
"2012-01-01 07:00:00",
2716.0
],
[
"2012-01-01 08:00:00",
2680.0
],
[
"2012-01-01 09:00:00",
2581.0
]
],
"val_samples": 3424,
"val_table": [
[
"date",
"OT"
],
[
"2014-08-11 08:00:00",
3528.0
],
[
"2014-08-11 09:00:00",
3800.0
],
[
"2014-08-11 10:00:00",
3889.0
],
[
"2014-08-11 11:00:00",
4340.0
],
[
"2014-08-11 12:00:00",
4321.0
],
[
"2014-08-11 13:00:00",
4293.0
],
[
"2014-08-11 14:00:00",
4393.0
],
[
"2014-08-11 15:00:00",
4384.0
],
[
"2014-08-11 16:00:00",
4495.0
],
[
"2014-08-11 17:00:00",
4374.0
]
]
},
"analysis": {
"histogram": ""
},
"dataset_path": "./dataset/electricity",
"show_type": "csv",
"dataset_type": "TSDataset"
}
上述校验结果中,check_pass 为 True 表示数据集格式符合要求,其他部分指标的说明如下:
如需对数据集格式进行转换或是重新划分数据集,可通过修改配置文件或是追加超参数的方式进行设置。可以参考时序预测模块开发教程中4.1.3。
在训练之前,请确保您已经对数据集进行了校验。完成 PaddleX 模型的训练,只需如下一条命令:
python main.py -c paddlex/configs/modules/ts_forecast/DLinear.yaml \
-o Global.mode=train \
-o Global.dataset_dir=./dataset/electricity \
-o Train.epochs_iters=5 \
-o Train.batch_size=16 \
-o Train.learning_rate=0.0001 \
-o Train.time_col=date \
-o Train.target_cols=OT \
-o Train.freq=1h \
-o Train.input_len=96 \
-o Train.predict_len=96
在 PaddleX 中模型训练支持:修改训练超参数、单机单卡训练(时序模型仅支持单卡训练)等功能,只需修改配置文件或追加命令行参数。
PaddleX 中每个模型都提供了模型开发的配置文件,用于设置相关参数。模型训练相关的参数可以通过修改配置文件中 Train 下的字段进行设置,配置文件中部分参数的示例说明如下:
Global:
mode:模式,支持数据校验(check_dataset)、模型训练(train)、模型评估(evaluate)、单例测试(predict);device:训练设备,可选cpu、gpu、xpu、npu、mlu;可在该路径下模型支持列表的文档中,查看不同设备上支持的模型;Train:训练超参数设置;
epochs_iters:训练轮次数设置;learning_rate:训练学习率设置;batch_size:训练单卡批大小设置;time_col: 时间列,须结合自己的数据设置时间序列数据集的时间列的列名称;target_cols:目标变量列,须结合自己的数据设置时间序列数据集的目标变量的列名称,可以为多个,多个之间用','分隔;freq:频率,须结合自己的数据设置时间频率,如:1min、5min、1h;input_len: 输入给模型的历史时间序列长度;输入长度建议结合实际场景及预测长度综合考虑,一般来说设置的越大,能够参考的历史信息越多,模型精度通常越高;predict_len:希望模型预测未来序列的长度;预测长度建议结合实际场景综合考虑,一般来说设置的越大,希望预测的未来序列越长,模型精度通常越低;patience:early stop机制参数,指在停止训练之前,容忍模型在验证集上的性能多少次连续没有改进;耐心值越大,一般训练时间越长。
更多超参数介绍,请参考 PaddleX时序任务模型配置文件参数说明。以上参数可以通过追加令行参数的形式进行设置,如指定模式为模型训练:-o Global.mode=train;指定前 1 卡 gpu 训练:-o Global.device=gpu:0;设置训练轮次数为 10:-o Train.epochs_iters=10;
模型训练过程中,PaddleX 会自动保存模型权重文件,默认为output,如需指定保存路径,可通过配置文件中 -o Global.output 字段。
output,如需指定保存路径,可通过配置文件中 -o Global.output 字段进行设置。./output/)下,通常有以下产出:训练产出解释:
在完成模型训练后,所有产出保存在指定的输出目录(默认为./output/)下,通常有以下产出:
best_accuracy.pdparams.tar、scaler.pkl、.checkpoints 、.inference:模型权重相关文件,包括网络参数、优化器、静态图权重等。在完成模型训练后,可以对指定的模型权重文件在验证集上进行评估,验证模型精度。使用 PaddleX 进行模型评估,只需一行命令:
python main.py -c paddlex/configs/modules/ts_forecast/DLinear.yaml \
-o Global.mode=evaluate \
-o Global.dataset_dir=./dataset/electricity \
与模型训练类似,模型评估支持修改配置文件或追加命令行参数的方式设置。
注: 在模型评估时,需要指定模型权重文件路径,每个配置文件中都内置了默认的权重保存路径,如需要改变,只需要通过追加命令行参数的形式进行设置即可,如-o Evaluate.weight_path=./output/best_model/model.pdparams。
在学习了模型训练和评估后,我们可以通过调整超参数来提升模型的精度。通过合理调整训练轮数,您可以控制模型的训练深度,避免过拟合或欠拟合;而学习率的设置则关乎模型收敛的速度和稳定性。因此,在优化模型性能时,务必审慎考虑这两个参数的取值,并根据实际情况进行灵活调整,以获得最佳的训练效果。
基于控制变量的方法,我们可以采用在初始阶段基于固定的较小轮次,多次调整学习率,从而找到较优学习率;之后再次增大训练轮次,进一步提升效果。对于时序预测任务,输入长度决定了模型在做出预测时将考虑历史数据的多少,也尤为的重要。下面我们详细介绍时序预测的调参方法:
推荐在调试参数时遵循控制变量法:
| 实验id | 轮次 | 学习率 | batch_size | 输入长度 | 预测长度 | 训练环境 | 验证集 mse |
|---|---|---|---|---|---|---|---|
| 实验一 | 5 | 0.0001 | 16 | 96 | 96 | 1卡 | 0.314 |
| 实验二 | 5 | 0.001 | 16 | 96 | 96 | 1卡 | 0.302 |
| 实验三 | 5 | 0.01 | 16 | 96 | 96 | 1卡 | 0.320 |
| 实验id | 轮次 | 学习率 | batch_size | 输入长度 | 预测长度 | 训练环境 | 验证集 mse |
|---|---|---|---|---|---|---|---|
| 实验二 | 5 | 0.001 | 16 | 96 | 96 | 1卡 | 0.302 |
| 实验四 | 30 | 0.001 | 16 | 96 | 96 | 1卡 | 0.301 |
| 实验id | 轮次 | 学习率 | batch_size | 输入长度 | 预测长度 | 训练环境 | 验证集 mse |
|---|---|---|---|---|---|---|---|
| 实验四 | 30 | 0.001 | 16 | 96 | 96 | 1卡 | 0.301 |
| 实验五 | 30 | 0.001 | 16 | 144 | 96 | 1卡 | 0.188 |
将产线中的模型替换为微调后的模型进行测试,使用本案例中的电力测试数据,进行预测:
python main.py -c paddlex/configs/modules/ts_forecast/DLinear.yaml \
-o Global.mode=predict \
-o Predict.model_dir="./output/inference" \
-o Predict.input=https://paddle-model-ecology.bj.bcebos.com/paddlex/PaddleX3.0/doc_images/practical_tutorial/timeseries_forecast/test.csv
通过上述可在./output下生成预测结果,其中test.csv的预测结果保存在result.csv中。
与模型训练和评估类似,需要如下几步:
.yaml 配置文件路径(此处为DLinear.yaml)-o Global.mode=predict-o Predict.model_dir="./output/inference"-o Predict.input="..."
其他相关参数均可通过修改.yaml配置文件中的Global和Predict下的字段来进行设置,详细请参考PaddleX时序任务模型配置文件参数说明。如果通用时序预测产线可以达到您对产线推理速度和精度的要求,您可以直接进行开发集成/部署。
若您需要使用微调后的模型权重,可以获取 ts_forecast 产线配置文件,并加载配置文件进行预测。可执行如下命令将结果保存在 my_path 中:
paddlex --get_pipeline_config ts_forecast --save_path ./my_path
将微调后模型权重的本地路径填写至产线配置文件中的 model_dir 即可, 若您需要将通用时序分类产线直接应用在您的 Python 项目中,可以参考 如下示例:
pipeline_name: ts_forecast
SubModules:
TSForecast:
module_name: ts_forecast
model_name: ./output/inference
model_dir: null # 此处替换为您训练后得到的模型权重本地路径
batch_size: 1
随后,在您的 Python 代码中,您可以这样使用产线:
from paddlex import create_pipeline
pipeline = create_pipeline(pipeline="my_path/ts_forecast.yaml")
output = pipeline.predict("pre_ts.csv")
for res in output:
res.print() # 打印预测的结构化输出
res.save_to_csv("./output/") # 保存csv格式结果
更多参数请参考时序预测产线使用教程。