我正在使用队列在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
然后我使用image
和label
变量,就像正常一样。我想要一个uid
变量,它对每个数据点都是唯一的。理想情况下,这将是介于0和数据集大小之间的整数,uid
只是当前数据点的索引。如何创建此uid
变量?
答案 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()