如何为队列中的每个数据点分配唯一的ID?

时间:2017-06-01 04:39:59

标签: tensorflow

我正在使用队列在tensorflow中加载数据。我的数据存储在TFRecords中。问题是我想要一个与每个数据点相关联的唯一ID,但我不知道如何做到这一点。 (UID将用于过滤数据集的部分,或者向数据集添加噪声; UID需要确保在每个时期中,相同的数据点被过滤或添加相同的噪声。)

我使用以下代码阅读数据点:

filename_queue = tf.train.string_input_producer(datapaths)
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)
features = tf.parse_single_example(
    serialized_example,
    features={
        'image_raw': tf.FixedLenFeature([], tf.string),
        'label': tf.FixedLenFeature([], tf.int64),
    })
image = tf.decode_raw(features['image_raw'], tf.uint8)
label = tf.cast(features['label'], tf.int32

然后我使用imagelabel变量,就像正常一样。我想要一个uid变量,它对每个数据点都是唯一的。理想情况下,这将是介于0和数据集大小之间的整数,uid只是当前数据点的索引。如何创建此uid变量?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我们的想法是创建一个存储uid的新队列。重要的是,没有任何队列对数据进行混洗,以便所有信息保持同步。

如果其他人将来需要这样的东西,请输入以下代码:

numdp=training_size 
uidqueue = tf.FIFOQueue(1000,tf.int32) 
uidcounter = tf.Variable(0,name='uidcounter') 
enqueue_op = uidqueue.enqueue(uidcounter.assign((uidcounter+1)%numdp)) 
qr = tf.train.QueueRunner(uidqueue,[enqueue_op]) 
queue_runner.add_queue_runner(qr) 
uid = uidqueue.dequeue()