gpt4 book ai didi

python - 创建具有多个输入的 TimeseriesGenerator

转载 作者:行者123 更新时间:2023-12-03 16:35:34 26 4
gpt4 key购买 nike

由于内存限制,我正在尝试使用来自约 4000 只股票的每日基本面和价格数据训练 LSTM 模型,在转换为模型的序列后,我无法将所有内容保存在内存中。

这导致我使用生成器代替 TimeseriesGenerator来自 Keras/Tensorflow。问题是,如果我尝试在所有堆叠的数据上使用生成器,它会创建混合股票序列,请参见下面的示例,序列为 5,这里是 序列3 将包括“股票 1”的最后 4 个观察值和“股票 2”的第一个观察值

Example of problem of creating sequences from independent stacked data

相反,我想要的是类似于:

enter image description here

有点类似的问题:Merge or append multiple Keras TimeseriesGenerator objects into one

我探索了像 SO 建议的那样组合生成器的选项:How do I combine two keras generator functions ,但是对于大约 4000 个生成器,这不是想法。

我希望我的问题是有道理的。

最佳答案

所以我最终做的是手动完成所有预处理并为包含预处理序列的每个股票保存一个 .npy 文件,然后使用手动创建的生成器我做这样的批处理:

class seq_generator():

def __init__(self, list_of_filepaths):
self.usedDict = dict()
for path in list_of_filepaths:
self.usedDict[path] = []

def generate(self):
while True:
path = np.random.choice(list(self.usedDict.keys()))
stock_array = np.load(path)
random_sequence = np.random.randint(stock_array.shape[0])
if random_sequence not in self.usedDict[path]:
self.usedDict[path].append(random_sequence)
yield stock_array[random_sequence, :, :]

train_generator = seq_generator(list_of_filepaths)

train_dataset = tf.data.Dataset.from_generator(seq_generator.generate(),
output_types=(tf.float32, tf.float32),
output_shapes=(n_timesteps, n_features))

train_dataset = train_dataset.batch(batch_size)

哪里 list_of_filepaths只是预处理 .npy 数据的路径列表。

这会:
  • 加载随机股票的预处理 .npy 数据
  • 随机选择一个序列
  • 检查序列的索引是否已经在usedDict中使用过
  • 如果不:
  • 将该序列的索引附加到 usedDict保持跟踪,不要将相同的数据两次提供给模型
  • 产生序列

  • 这意味着生成器将在每次“调用”时从随机股票中提供一个唯一的序列,使我能够使用 .from_generator().batch()来自 Tensorflows 的方法 Dataset类型。

    关于python - 创建具有多个输入的 TimeseriesGenerator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61177311/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com