python - Tensorflow:训练数据集中的每一行都包含之前行数据的 99%——我可以在运行训练之前对其进行优化吗?
问题描述
我正在寻找一种方法来使我的训练和测试数据的文件大小更小。
我想最终得到的模型
我想训练一个模型来预测加密货币价格是否正在上涨,并且 x%(0.4 左右)在接下来的 10 分钟内跳跃(即我希望模型回答是或否)。
每分钟我都会使用最近 3 小时的价格和成交量数据(这意味着 180 个数据点,每个数据点包含 5 个开盘价、收盘价、最高价、最低价和成交量)进行建模。
我目前的训练和测试集很大
因此,我的训练和测试集是 csv 文件中的一行,其中每一行包含 5 x 180 = 900 个数字加上一个标签(是或否),并且大约有 100k 行,我猜这是一个非常庞大的数据集。
但是 csv 中的每一行都包含大部分冗余数据
但是 csv 文件中的每个“邻居”行只包含 1 个新数据点,因为下一行只有 1 分钟“旧”,因此只跳过了最旧一分钟的数据点,而是引入了下一分钟的新数据点。
是否可以设置训练代码,以便 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))
推荐阅读
- linux - chmod 仅在当前目录中的文件,但不是子目录和主目录
- javascript - my-component.js:24 未捕获的类型错误:window.open 不是函数
- azure-devops - 在 Azure Devops 管道中通过 VSTest 适配器运行超过 21 个测试时出现 RPC 错误
- python - 如何在不使用数据透视表的情况下创建数据框以加快执行速度?
- django - docker django:为什么要将上下文复制到 docker 映像中,如果我们通过在 docker compose 中安装一些东西来覆盖它
- php - 错误 session_start():当文件头已经发送到 PHP 中时无法启动会话?
- javascript - 如果所有字段均已填写且电子邮件字段有效,则显示表单的下一步
- vue.js - 页面重新加载后 Vuetify DarkMode 颜色错误
- python - MATLAB python绑定:'cell'类型的输入参数的未定义函数'isfinite'
- arm - 如何从 SoC 直接写入 FPGA 外设?