2017-06-01 17 views
1

私はテンソルフローでデータをロードするためにキューを使用しています。私のデータはTFRecordsに格納されています。問題は、各データポイントに関連付けられた一意のIDが必要なことですが、これを行う方法はわかりません。 (UIDは、データセットの一部をフィルタリングするか、またはデータセットにノイズを追加するために使用されます;各エポックで同じデータポイントがフィルタリングされるか、同じノイズが追加されることを保証する必要があります)。キュー内の各データポイントに一意のIDを割り当てる方法を教えてください。

私はこのコードを使用してデータポイントをお読みください。

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変数を作成するにはどうすればよいですか?

答えて

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() 
関連する問題