Tensorflow:训练数据集中的每一行都包含前几行数据的 99% - 我可以在运行训练之前对其进行优化吗?



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

我想要的模型

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

每分钟我都会使用过去 3 小时的价格和交易量数据(这意味着 180 个数据点,每个数据点包含 5 个值打开、收盘、最高价、最低价和交易量(。

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

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

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

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

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

如果使用数据API,则可以缓存输入。另外,也许TF对Kafka的支持可能会有所帮助,因为您可以将其建模为数据流。

另一种方法是在会话调用之间重用一些数据。然后你必须使用资源变量(在当前的Variable()规范中,这意味着在构造函数中使用标志use_resource(。这样,您的csv只能包含分钟级数据,您只需将其添加到变量中即可 - 从中创建一种圆缓冲区。

是的,您可以进行此设置,以便 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))

相关内容

  • 没有找到相关文章

最新更新