python - 在 tensorflow 中与许多输入数据文件很好地混合

标签 python neural-network binaryfiles tensorflow

我正在与 tensorflow 合作,希望训练一个深度 CNN 来为围棋游戏做着法预测。我创建的数据集由 100,000 个二进制数据文件组成,其中每个数据文件对应一个记录的游戏并包含大约 200 个训练样本(一个用于游戏中的每个 Action )。我相信在使用 SGD 时获得良好的混合是非常重要的。我希望我的批处理包含来自不同游戏的样本和来自游戏不同阶段的样本。因此,例如,简单地从 100 个文件的开头读取一个样本并且洗牌并不好 b/c 这 100 个样本将是每个游戏的第一步。

我已经阅读了有关从文件中提供数据的教程,但我不确定他们提供的库是否满足我的需要。如果我自己对其进行硬编码,我基本上会将一堆文件指针初始化为每个文件中的随机位置,然后从随机文件中提取样本,相应地增加文件指针。

所以,我的问题是 tensorflow 是否提供这种功能,或者编写我自己的代码来创建批处理会更容易吗?

最佳答案

是的 - 你想要的是结合使用两种东西。 (请注意,这个答案是为 TensorFlow v1 编写的,一些功能已被新的 tf.data 管道取代;我已经更新了答案以指向事物的 v1 compat 版本,但是如果你要这个新代码的答案,请改为咨询 tf.data。)

首先,通过使用 tf.train.string_input_producer 从中读取数据文件,随机打乱您输入数据文件的顺序。使用 shuffle=True 可以输入您使用的任何输入法(如果您可以将示例放入 tf.Example 原型(prototype)格式,则可以很容易地与 parse_example 一起使用)。非常清楚,您将文件名列表放在 string_input_producer 中,然后使用另一种方法(例如 read_file 等)读取它们。

其次,您需要以更细的粒度进行混合。您可以通过将输入示例输入 tf.train.shuffle_batch 来完成此操作具有大容量和大 min_after_dequeue 值的节点。一种特别好的方法是使用 shuffle_batch_join 从多个文件接收输入,这样您就可以进行大量混合。将批处理的容量设置得足够大,以便在不耗尽 RAM 的情况下混合均匀。数以万计的示例通常效果很好。

请记住,批处理函数将 QueueRunner 添加到 QUEUE_RUNNERS 集合中,因此您需要运行 tf.train.start_queue_runners()

关于python - 在 tensorflow 中与许多输入数据文件很好地混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34258043/

相关文章:

python - 为什么在输出中打印 'None'?

python - 如何在keras中记录每批处理的val_loss和loss

java - 使用 Java 下载为二进制的文件已损坏

python - 更新 Python 以用于 AWS CLI

python - 向美国东部以外的云监视警报发送短信?

python - 如何使用多个输入变量 LSTM 生成 1 个输出

python - 如何访问和可视化预训练的 TensorFlow 2 模型中的权重?

c - 在 UNIX 系统 (Ubuntu 10.10) 上用 C 语言读取二进制文件

java - 从二进制文件中读取任意数量的对象

python - 为 MCEdit 的 python 脚本设置 WingIDE 环境