【发布时间】:2019-06-08 21:08:39
【问题描述】:
我有 60 GB 的 .npy 文件分布在 20 个文件中。我想在tensorflow 中建立一个神经网络来学习这些数据。
我计划训练 19 个文件以便测试 1 个文件。每个文件大约有 80 列 x 数据和 1 列分类 y 数据。数据类型为np.float64 和np.int64。我不能将数据类型减少到更小的大小,因为我会在舍入错误中丢失有价值的数据。
我在加载单个文件时将数据加载到我的神经网络中没有问题,但我在训练时遇到了问题,因为我需要学习所有数据。我无法按顺序学习文件(例如,按 1、2、3、...、19 的顺序训练文件 1-19)。我需要以某种方式对每个时期的 所有 数据进行洗牌。
我读过像this one 这样的帖子,看起来和我的问题几乎一模一样。但是,我的问题不同,因为我需要在多个文件之间进行随机播放。我还没有看到在stackoverflow上回答过这样的问题。
【问题讨论】:
-
据我所知,您有几个选择:1)从 1-19 随机选择文件(无需替换)以获得一些随机洗牌 2)预先洗牌文件(例如,混合 2 个文件的辅助函数
(3, 15),(5, 10), ...)。将更多的改组堆叠在一起以获得更多改组 3)将数据集分解为更多文件,例如 100 个文件而不是 20 个文件。有什么理由你没有尝试过吗? 4)使用tf.data.TfRecords(在链接的问题中提到过)。这行不通吗?为什么不呢? -
也许您可以使用interleave 或parallel_interleave 使用tf 数据管道。在这种情况下,您的周期长度可能是 20。您可以使用from_generator 定义一个生成器,该生成器对每个文件中的数据进行混洗并产生混洗数据,并在此之上应用带有 num_parallel_calls 参数的 interleave 或带有 sloppy 参数的 parallel_interleave
标签: python numpy tensorflow