首页 > 解决方案 > Tensorflow:训练数据集中的每一行都包含之前行数据的 99%——我可以在运行训练之前对其进行优化吗?

问题描述

我正在寻找一种方法来使我的训练和测试数据的文件大小更小。

我想最终得到的模型

我想训练一个模型来预测加密货币价格是否正在上涨,并且 x%(0.4 左右)在接下来的 10 分钟内跳跃(即我希望模型回答是或否)。

每分钟我都会使用最近 3 小时的价格和成交量数据(这意味着 180 个数据点,每个数据点包含 5 个开盘价、收盘价、最高价、最低价和成交量)进行建模。

我目前的训练和测试集很大

因此,我的训练和测试集是 csv 文件中的一行,其中每一行包含 5 x 180 = 900 个数字加上一个标签(是或否),并且大约有 100k 行,我猜这是一个非常庞大的数据集。

但是 csv 中的每一行都包含大部分冗余数据

但是 csv 文件中的每个“邻居”行只包含 1 个新数据点,因为下一行只有 1 分钟“旧”,因此只跳过了最旧一分钟的数据点,而是引入了下一分钟的新数据点。

是否可以设置训练代码,以便 csv 文件只需要在每一行中有最新的分钟数据点?

标签: pythontensorflowdatasettensorflow-datasets

解决方案


是的,您可以进行设置,以便 CSV 文件的每一行中只需要包含最新一分钟的数据。

如果您的 CSV 文件每行包含一个数据点,您可以创建滑动窗口批次,如下所示:

从 TF 1.12 开始:

window_size = 180
dataset = tf.data.experimental.CsvDataset(filenames, defaults)
dataset = dataset.window(window_size=window_size, shift=1)
dataset = dataset.flat_map(lambda x: x.batch(window_size))

例如,如果您有一个包含元素的数据集 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

# Contains {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
dataset = ...

dataset = dataset.window(window_size=3, shift=1)
dataset = dataset.flat_map(lambda x: x.batch(3))
it = dataset.make_one_shot_iterator()
nxt = it.get_next()
with tf.Session() as sess:
  sess.run(nxt)  # [1, 2, 3]
  sess.run(nxt)  # [2, 3, 4]
  sess.run(nxt)  # [3, 4, 5]
  ...etc...

在 TF 1.11 及更早版本中:

window_size = 180
dataset = tf.contrib.data.CsvDataset(filenames, defaults)
dataset = dataset.apply(tf.contrib.data.sliding_window_batch(window_size=window_size))

推荐阅读