Hello everyone,
I have a time series regression problem. I want to predict a single value based on a time series.
To problem is to predict the arrival time of a signal. The blue line below is the label (arrival time) and the red is the signal. I have 2000 of these samples.
The time series has the length 50,000, I used tsai’s LSTM, 1D CNNs and other models, but I couldn’t get the desired results. The predicted value is always around a constant, which is kind of the average of the labels. I suspect that something is wrong with my choice of hyperparameters and loss function, can anyone suggest a solution?
My code is as follows:
from tsai.all import *
get_ipython().run_line_magic(‘matplotlib’, ‘inline’)
BS=10
Simulation_Data = np.load(’./myData/SimuData_1_resample.npy’)
Label = np.load(’./myData/ToA_1_resample.npy’)
X=Simulation_Data.reshape(2000, 1, -1)
y=Label.reshape(2000,)/25000
splits = (L(np.arange(int(len(y)*0.8)), use_list=True),
L(np.arange(int(len(y)*0.8), len(y)), use_list=True))
check_data(X, y, splits)
tfms = [None, [TSRegression()]]
batch_tfms = TSStandardize(by_sample=True, by_var=True)
dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=BS) #TSDataLoaders.from_dsets
dls.one_batch()
model = LSTM(dls.vars, dls.c,hidden_size=10 ,bidirectional=True)
learn = ts_learner(dls, model,
metrics=[mae, rmse], cbs=ShowGraph()) #metrics=[f1]
learn.lr_find()
learn.fit_one_cycle(1, 1e-3)
learn.fit_one_cycle(20, slice(1e-8, (1e-2)/5))
learn.fit_one_cycle(20, slice(1e-8, 1e-3))
valid_preds, valid_targets = learn.get_preds(ds_idx=1)
valid_preds.flatten().data
valid_preds = valid_preds.cpu().detach().numpy()
valid_targets = valid_targets.cpu().detach().numpy()
Thank you for your help