我正在使用带有Tensorflow对象检测API的Faster-RCNN模型进行徽标检测算法。 我的数据集按字母顺序排列(因此有一百个adidas徽标,然后是一百个苹果徽标等)。而且我希望在训练时进行洗牌。
我在配置文件中添加了一些值:
train_input_reader:{
shuffle: true
queue_capacity: some value
min_after_dequeue : some other value}
然而无论价值是什么,我都会投入,算法首先要对所有的标识(adidas,苹果等)进行培训,并且在开始看之后只有一段时间b的徽标(bmw等)和c的徽标等。
当然我可以直接调整我的输入数据集,但我想了解它背后的逻辑。
PS:我已经看过关于洗牌和min_after_dequeue的这个post,但我还是不太明白。我的批量大小为1,因此它不应该使用tf.train.shuffle_batch()
,而只能使用tf.RandomShuffleQueue
我的训练数据集大小为5000,如果我写min_after_dequeue: 4000 or 5000
,它仍然没有改组。为什么呢?
更新: @AllenLavoie这对我来说有点难过;因为存在很多依赖关系,而且我是Tensorflow的新手。 但最后队列是由
构建的tf.contrib.slim.parallel_reader.parallel_read( _, string_tensor = parallel_reader.parallel_read(
config.input_path,
reader_class=tf.TFRecordReader,
num_epochs=(input_reader_config.num_epochs
if input_reader_config.num_epochs else None),
num_readers=input_reader_config.num_readers,
shuffle=input_reader_config.shuffle,
dtypes=[tf.string, tf.string],
capacity=input_reader_config.queue_capacity,
min_after_dequeue=input_reader_config.min_after_dequeue)
似乎当我将num_readers = 1
放入配置文件时,数据集最终会按照我想要的方式进行洗牌,(至少在开始时),但是当开始时有更多的某些方式时,徽标按字母顺序排列。
答案 0 :(得分:1)
我建议在训练之前改组数据集。目前正在进行洗牌的方式并不完美,我对正在发生的事情的猜测是,在开始时队列开始是空的,只得到以“A' A”开头的示例。 ---过了一会儿它可能会更加洗牌,但是当队列还没有被填满时,开始部分就没有了。