python - 将多个 Keras TimeseriesGenerator 对象合并或附加到一个

标签 python tensorflow keras lstm

我正在尝试制作 LSTM 模型。数据来自一个包含多只股票值的 csv 文件。

我不能使用出现在文件中的所有行来制作序列,因为每个序列只与它自己的股票相关,所以我需要为每只股票选择行并基于它制作序列。

我有这样的事情:

for stock in stocks:

    stock_df = df.loc[(df['symbol'] == stock)].copy()
    target = stock_df.pop('price')

    x = np.array(stock_df.values)
    y = np.array(target.values)

    sequence = TimeseriesGenerator(x, y, length = 4, sampling_rate = 1, batch_size = 1)

这工作正常,但随后我想将这些序列中的每一个合并成一个更大的序列,我将用于训练并包含所有股票的数据。

不能使用 append 或 merge,因为该函数返回一个生成器对象,而不是一个 numpy 数组。

最佳答案

编辑:新答案:

所以我最终做的是手动完成所有预处理并为包含预处理序列的每个股票保存一个 .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类型。

    原答案:

    我认为@TF_Support 的回答有点不切实际。如果我理解你的问题,这并不是说你想训练一个模型 pr。库存, 你想要一个在整个数据集上训练的模型 .

    如果您有足够的内存,您可以手动创建序列并将整个数据集保存在内存中。我面临的问题是类似的,我根本无法将所有内容都保存在内存中:Creating a TimeseriesGenerator with multiple inputs .

    相反,我正在探索单独预处理每只股票的所有数据的可能性,保存为 .npy 文件,然后使用生成器加载这些 .npy 文件的随机样本以将数据批处理到模型中,我不完全确定如何不过要解决这个问题。

    关于python - 将多个 Keras TimeseriesGenerator 对象合并或附加到一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61155779/

    相关文章:

    tensorflow - TFRecords 文件的分片需要什么?

    python - 连接 Python 和 SQL Server 数据库

    python - Keras:无输入的自定义图层

    python - 谷歌.protobuf.message.DecodeError : Error parsing message

    python - 重置在 Tensorflow 2 数据集中到底意味着什么?

    python - 了解 Keras 中语音识别的 CTC 损失

    python - 如何在 keras 或 tensorflow 中使用 ImageDataGenerator 获取相同的增强图像?

    javascript - Django - 将 python 数据传递给 javascript

    python - 2 网络摄像头饲料不工作 opencv

    python - 在 Python 中随时间动画线图