2017-07-05 70 views
0

我正在使用帶有Tensorflow對象檢測API的Faster-RCNN模型進行標識檢測算法。 我的數據集是按字母順序排列的(所以有一百個阿迪達斯標誌,然後百個蘋果標誌等)。而且我希望在訓練時將其洗牌。使用Tensorflow對象檢測api改寫訓練數據集

我已經把一些值在配置文件中:

train_input_reader:{ 
      shuffle: true 
      queue_capacity: some value 
      min_after_dequeue : some other value} 

然而無論是價值觀,我把在,算法是在所有A公司的徽標(阿迪達斯,蘋果的第一次訓練等等),只有一段時間後,開始看b的標誌(bmw等)和c的一個等

當然,我可以直接洗牌我的輸入數據集,但我想了解邏輯在它後面。

PS:我已經看到這個post關於洗牌和min_after_dequeue,但我仍然沒有得到它。我的批量大小是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

你可以發佈一個最小限度的複製(即一個自包含的命令+代碼具有相同的問題位)?我懷疑配置參數並沒有傳播到TensorFlow,但是有很多方法可能發生。 –

+0

@AllenLavoie在帖子中增加了更多信息 –

+0

您可以通過將'parallel_read'參數設置爲文字值(例如'shuffle = True,min_after_dequeue = 4000,capacity = 10000')來重現嗎? –

回答

0

我建議在訓練之前洗牌數據集。當前發生的洗牌方​​式並不完美,我對發生的事情的猜測是,開始的時候,隊列開始處於空白狀態,只能得到以'A'開頭的例子 - 一段時間後可能會有更多洗牌,但是沒有當隊列還沒有被填滿時繞過開始部分。

+1

但'min_after_dequeue'不應該允許嗎? 關於洗牌數據集,是的,我會這樣做;只是想了解這些原則。 –

相關問題