向TimeseriesGenerator添加延时?

2024-05-29 02:25:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用kerasTimeseriesGenerator函数来创建一个样本和目标,但希望向输出添加一个时间延迟(即,将目标移动一些时间步)。我在文档中看到没有对添加延迟的本地支持。如何手动添加?以下是我目前的代码:

import numpy as np
from keras.preprocessing.sequence import TimeseriesGenerator

X = np.arange(100000).reshape(10000, 10)
y = np.arange(50000).reshape(10000, 5)

timesteps = 50
step = 1
delay = 20
batch_size = 20

gener = TimeseriesGenerator(X, y, timesteps, sampling_rate=1,
                            stride=step, start_index=0, end_index=None, shuffle=False, reverse=False, batch_size=batch_size)

y的第一批输出是[[250. 251. 252. 253. 254.], [...],但是我希望输出被移动20个时间步的延迟。所以第一批的y应该从 [[350. 351. 352. 353. 354. 355], [...]


Tags: 函数importfalse目标sizeindexstepnp
1条回答
网友
1楼 · 发布于 2024-05-29 02:25:26

您可以覆盖TimeseriesGenerator类来实现此功能,例如使用numpy.滚动你知道吗

class TSGen(keras.preprocessing.sequence.TimeseriesGenerator):

def __init__(self, delay, **kwargs):
    self.targets = kwargs['targets']
    self.delay = delay
    kwargs['targets'] = np.roll(kwargs['targets'], np.negative(delay))
    super().__init__(**kwargs)

def __len__(self):
    return int(np.ceil((len(self.targets) - self.delay - self.length) / self.batch_size))

delay参数指定跳过多少步。你知道吗

a1=np.array([[1,2,3,4,5,6,7,8,9]]).reshape(-1,1)
a2=np.array([[10,20,30,40,50,60,70,80,90]]).reshape(-1,1)
b = np.concatenate((a1,a2), axis=1)

在b上使用标准TimeseriesGenerator将产生

[[1 2 3]] => [40]
[[2 3 4]] => [50]
[[3 4 5]] => [60]
[[4 5 6]] => [70]
[[5 6 7]] => [80]
[[6 7 8]] => [90]

使用新类例如

ts_gen = TSGen(2, data=b[:,0],targets=b[:,1],length=3,batch_size=1,stride=1,sampling_rate=1)

将产生以下结果:

[[1 2 3]] => [60]
[[2 3 4]] => [70]
[[3 4 5]] => [80]
[[4 5 6]] => [90]

相关问题 更多 >

    热门问题