微调
重复使用微调模型
1. 导入包
首先,我们导入所需的包并初始化 Nixtla 客户端
2. 加载数据
unique_id | ds | y | |
---|---|---|---|
0 | H1 | 1 | 605.0 |
1 | H1 | 2 | 586.0 |
2 | H1 | 3 | 586.0 |
3 | H1 | 4 | 559.0 |
4 | H1 | 5 | 511.0 |
3. 零样本预测
我们可以尝试不进行任何微调来查看 TimeGPT 的表现如何。
metric | TimeGPT | |
---|---|---|
0 | rmse | 1504.474342 |
4. 微调
现在我们可以对 TimeGPT 进行一些微调,并将模型保存供以后使用。我们可以通过提供 output_model_id
来定义我们希望该模型拥有的 ID。
现在我们可以通过 finetuned_model_id
参数提供其 ID 来使用这个微调模型进行预测。
metric | TimeGPT_zero_shot | TimeGPT_first_finetune | |
---|---|---|---|
0 | rmse | 1504.474342 | 1472.024619 |
我们可以看到误差减小了。
5. 进一步微调
现在我们可以使用 NixtlaClient.finetune
方法将此模型进一步微调,通过将我们已经微调过的模型作为 finetuned_model_id
提供,它将在此模型基础上进行更多微调。我们还可以更改微调设置,例如使用 finetune_depth=3
。
由于这次我们没有提供 output_model_id
,它被分配了一个 UUID。
现在我们可以使用此模型进行预测。
metric | TimeGPT_first_finetune | TimeGPT_second_finetune | |
---|---|---|---|
0 | rmse | 1472.024619 | 1435.365211 |
我们可以看到误差又减小了一些。
6. 列出微调模型
我们可以使用 NixtlaClient.finetuned_models
方法列出我们的微调模型。
虽然这种表示方式可能对编程有用,但在探索性设置中,将其显示为 dataframe 更直观,我们可以通过提供 as_df=True
来实现。
id | created_at | created_by | base_model_id | steps | depth | loss | model | freq | |
---|---|---|---|---|---|---|---|---|---|
0 | 468b13fb-4b26-447a-bd87-87a64b50d913 | 2024-12-30 17:57:31.241455+00:00 | user | my-first-finetuned-model | 10 | 3 | default | timegpt-1-long-horizon | MS |
1 | my-first-finetuned-model | 2024-12-30 17:57:16.978907+00:00 | user | None | 10 | 1 | default | timegpt-1-long-horizon | MS |
我们可以看到,第二个模型的 base_model_id
是我们的第一个模型,以及其他元数据。
7. 删除微调模型
为了保持整洁,并且由于微调模型的数量限制为 50 个,您可以删除不太有前景的模型,以便为更多实验腾出空间。例如,我们可以删除我们的第一个微调模型。请注意,即使它被用作我们第二个模型的基础,它们也是独立保存的,因此删除它不会影响我们的第二个模型,只会影响相关的元数据。
我们可以验证我们的第一个模型不再显示在我们可用的模型列表中。
id | created_at | created_by | base_model_id | steps | depth | loss | model | freq | |
---|---|---|---|---|---|---|---|---|---|
0 | 468b13fb-4b26-447a-bd87-87a64b50d913 | 2024-12-30 17:57:31.241455+00:00 | user | my-first-finetuned-model | 10 | 3 | default | timegpt-1-long-horizon | MS |