我的问题是关于如何从多个(或分片)tfrecord中获取批处理输入。我看过www.example.com的例子https://github.com/tensorflow/models/blob/master/inception/inception/image_processing.py#L410。基本的流水线是,以训练集为例,(1)首先生成一系列tfrecords(例如,train-000-of-005
,train-001-of-005
,...),(2)从这些文件名中,生成一个列表并将它们送入tf.train.string_input_producer
以获得队列,(3)同时生成一个tf.RandomShuffleQueue
来做其他事情,(4)使用tf.train.batch_join
生成批量输入。
我认为这很复杂,我不确定这个程序的逻辑。在我的例子中,我有一个.npy
文件列表,我想生成分片的tfrecords(多个单独的tfrecords,而不仅仅是一个大文件)。这些.npy
文件中的每一个都包含不同数量的正样本和负样本(2类)。一个基本的方法是生成一个单一的大型tfrecord文件。但是文件太大(~20Gb
)。所以我求助于分片tfrecords。有没有更简单的方法来做到这一点?
1条答案
按热度按时间a64a0gku1#
使用
Dataset API
简化了整个过程。以下是两个部分:(1): Convert numpy array to tfrecords
和(2): read the tfrecords to generate batches
。1.从numpy数组创建tfrecords:
2.使用Dataset API读取tfrecords:
检查生成的批次是否正确: