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

2024-04-20 15:52:28 发布

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

我正在寻找一种方法,使我的培训和测试数据在文件大小更小。你知道吗

我想要的最终型号

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

每分钟我都会用最后3个小时的价格和成交量数据(也就是说180个数据点,每个数据点包含5个开盘、收盘、高价、低价和成交量的值)。你知道吗

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

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

但csv中的每一行都包含大量冗余数据

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

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


Tags: 文件csv数据方法模型价格硬币小时
2条回答

如果使用数据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))

相关问题 更多 >