PaddlePaddle / PaddleTS

Awesome Easy-to-Use Deep Time Series Modeling based on PaddlePaddle, including comprehensive functionality modules like TSDataset, Analysis, Transform, Models, AutoTS, and Ensemble, etc., supporting versatile tasks like time series forecasting, representation learning, and anomaly detection, etc., featured with quick tracking of SOTA deep models.
Apache License 2.0
479 stars 116 forks source link

Pipline的recursive_predict的IndexError: list index out of range bug #454

Closed suntao2015005848 closed 4 months ago

suntao2015005848 commented 11 months ago

在使用Pipline训练NBEATSModel模型后: {"model_type": "forecasting", "ancestor_classname_set": ["NBEATSModel", "PaddleBaseModelImpl", "PaddleBaseModel", "BaseModel", "Trainable", "ABC", "object"], "modulename": "paddlets.models.forecasting.dl.nbeats", "size": {"in_chunk_len": 288, "out_chunk_len": 24, "skip_chunk_len": 0}, "input_data": {"target_dim": 1, "known_cov_dim": 3}} 递归预测测试代码:

#模型直接预测
import pandas as pd

import numpy as np
import matplotlib.pyplot as plt

import datetime
import paddlets
from paddlets import TSDataset
from paddlets import TimeSeries
from paddlets.models.forecasting.dl import * #引入了全部预测模型
from paddlets.models.forecasting import * #引入了全部预测模型
from paddlets.transform import Fill, StandardScaler
from paddlets.metrics import MSE, MAE
import warnings
warnings.filterwarnings('ignore')
import os 
from paddlets.transform import TimeFeatureGenerator
from paddlets.pipeline.pipeline import Pipeline

df = pd.read_csv('/home/aistudio/ydl/fh_power_data.csv')
df = df.filter(items=['monitorTime', 'presentValue'])
target_cov_dataset = TSDataset.load_from_dataframe(
    df,
    time_col='monitorTime',
    target_cols='presentValue',
    known_cov_cols ='monitorTime',
    freq='5min',
    fill_missing_dates=True,
    fillna_method='pre'
)    

# 是否是工作日
time_feature_generator = TimeFeatureGenerator(feature_cols=['is_workday','weekday','hour'])
target_cov_dataset_1 = time_feature_generator.fit_transform(target_cov_dataset)

df_cov = target_cov_dataset_1.to_dataframe()

# 转为df后重新处理为tsdataset
target_cov_dataset_2 = TSDataset.load_from_dataframe(
    df_cov,
    time_col='monitorTime',
    target_cols='presentValue',
    known_cov_cols =['is_workday','weekday','hour'],
    freq='5min',
    fill_missing_dates=True,
    fillna_method='pre'
)    

loaded_model = Pipeline.load("/home/aistudio/ydl/model_nbeats/in288_out24/")
print(len(loaded_model._transform_list))
da1 ,da2 = target_cov_dataset_2.split('2023-09-08 23:55:00')
da3 ,da4 = da2.split('2023-09-09 23:55:00')
print('预测数据:---------------------------------------------------------->')
print(da3.get_target())
print(da3.get_known_cov())

# res = mod.predict(da1)
loaded_model.recursive_predict(da3, predict_length=24)

输出结果报错:

0
预测数据:---------------------------------------------------------->
                     presentValue
monitorTime                      
2023-09-09 00:00:00           6.2
2023-09-09 00:05:00           6.4
2023-09-09 00:10:00           6.2
2023-09-09 00:15:00           7.0
2023-09-09 00:20:00           7.0
...                           ...
2023-09-09 23:35:00           6.3
2023-09-09 23:40:00           6.1
2023-09-09 23:45:00           6.4
2023-09-09 23:50:00           6.9
2023-09-09 23:55:00           6.2

[288 rows x 1 columns]
                     is_workday  weekday  hour
monitorTime                                   
2023-09-09 00:00:00         0.0        5     0
2023-09-09 00:05:00         0.0        5     0
2023-09-09 00:10:00         0.0        5     0
2023-09-09 00:15:00         0.0        5     0
2023-09-09 00:20:00         0.0        5     0
...                         ...      ...   ...
2023-09-13 17:20:00         1.0        2    17
2023-09-13 17:25:00         1.0        2    17
2023-09-13 17:30:00         1.0        2    17
2023-09-13 17:35:00         1.0        2    17
2023-09-13 17:40:00         1.0        2    17

[1365 rows x 3 columns]

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
/tmp/ipykernel_13721/4072872998.py in <module>
     58 
     59 # res = mod.predict(da1)
---> 60 loaded_model.recursive_predict(da3, predict_length=24)
     61 

/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddlets/pipeline/pipeline.py in recursive_predict(self, tsdataset, predict_length)
    280             TSDataset: Predicted results.
    281         """
--> 282         return self._recursive_predict(tsdataset, predict_length)
    283 
    284     def recursive_predict_proba(

/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddlets/pipeline/pipeline.py in _recursive_predict(self, tsdataset, predict_length, need_proba)
    404             pre_data = tsdataset_copy
    405         data_pre_transformed, data_pre_transformed_caches = self.transform(tsdataset=pre_data,
--> 406                                                                            cache_transform_steps=True)
    407 
    408         results = []

/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddlets/pipeline/pipeline.py in transform(self, tsdataset, inplace, cache_transform_steps, previous_caches)
    143         transform_caches = [None] * tansform_list_length
    144         # the first transformer's cache is the origin data
--> 145         if cache_transform_steps and self._transform_list[0].need_previous_data:
    146             transform_caches[0] = tsdataset_transformed
    147 

IndexError: list index out of range
Sunting78 commented 8 months ago

您好 可以提供下具体的环境,我们进行复现

Sunting78 commented 4 months ago

长时间未回复,该issue已关闭,如仍有问题可以reopen或新开issue。