Tensorflow 在一个.tfrecords文件中混合多个记录的属性
我有一个大约100万个例子的数据集。我将每个示例都添加到一个单独的.tfrecord文件中,这导致在某个网络位置大约有500GB 从这个网络位置读取多个小文件的速度非常慢,所以我考虑将大约100个示例分组到一个.tfrecord文件中 但是,我担心,来自同一.tfrecords文件的示例总是出现在同一个小批量中(或者一个小批量出现在另一个小批量中),这不利于正确混合我想要的训练数据 我的输入管道如下所示: 我有一个Tensorflow 在一个.tfrecords文件中混合多个记录的属性,tensorflow,Tensorflow,我有一个大约100万个例子的数据集。我将每个示例都添加到一个单独的.tfrecord文件中,这导致在某个网络位置大约有500GB 从这个网络位置读取多个小文件的速度非常慢,所以我考虑将大约100个示例分组到一个.tfrecord文件中 但是,我担心,来自同一.tfrecords文件的示例总是出现在同一个小批量中(或者一个小批量出现在另一个小批量中),这不利于正确混合我想要的训练数据 我的输入管道如下所示: 我有一个tf.train.string\u input\u producer(files,
tf.train.string\u input\u producer(files,capacity=100000)
用于文件名队列,使用TFRecordReader.read
读取文件名队列,使用tf.train.batch
创建一个示例队列并使用dequeue\u many
从中返回一个批
我担心一旦文件名队列将文件名出列,它的所有示例都将被读取并排入由tf.train.batch
创建的示例FIFO队列,这将导致相同的示例反复出现在相同的小批量中
它真的会在同一个迷你批次中反复出现相同的示例吗?如果是这样,我是否应该创建一个随机队列作为示例,而不是使用
tf.train.batch
TFRecord的要点之一是将多个文件存储在同一位置,以克服打开/关闭多个文件的问题。因此,您对每个示例使用一个tfrecord的方法是没有意义的。您甚至可以将所有示例放在一个文件中,或者每个文件有10k。关于洗牌:有两种类型的洗牌服务于不同的目的和洗牌不同的东西:
- 洗牌:布尔。如果为true,则字符串在每个历元内随机洗牌。。因此,如果您有几个文件
这会从列表中随机选择一个文件。如果为false,则文件将依次显示['file1'、'file2'、…、'filen']
- 通过随机洗牌张量创建批次。因此,它从您的队列中获取
张量(您需要使用batch\u size
创建一个队列)并将其洗牌tf.train.start\u queue\u runner
- 洗牌:布尔。如果为true,则字符串在每个历元内随机洗牌。。因此,如果您有几个文件
这会从列表中随机选择一个文件。如果为false,则文件将依次显示['file1'、'file2'、…、'filen']
- 通过随机洗牌张量创建批次。因此,它从您的队列中获取
张量(您需要使用batch\u size
创建一个队列)并将其洗牌tf.train.start\u queue\u runner