2017-02-22 171 views
3

我想比較兩種不同大型圖像數據集的以下幾種CNN的性能。目標是衡量兩幅圖像之間的相似度,這兩幅圖像在訓練期間都沒有看到。我可以訪問2個GPU和16個CPU內核。Tensorflow中的Triplet,Siamese和Softmax

  1. 三重CNN(輸入:三幅圖像,標籤:在位置編碼)
  2. 連體CNN(輸入:兩個圖像,標籤:一個二進制標記)
  3. 使用SoftMax CNN地物學習(輸入:一個圖像,Label:一個整數標籤)

對於Softmax,我可以以二進制格式存儲數據(順序存儲標籤和圖像)。然後用TensorFlow閱讀器讀取它。

要爲Triplet和Siamese Networks使用相同的方法,我必須預先生成組合並將它們存儲到磁盤。這會在創建文件和磁盤空間中花費大量時間。它如何在飛行中完成?

另一個簡單的方法是使用feed_dict,但這會很慢。因此,如果可以並行運行我用於feed_dict的相同函數並將結果轉換爲TensorFlow張量作爲最後一步,問題就可以解決。但據我所知,這種轉換不存在,所以人們必須首先用TensorFlow閱讀器讀取文件,並用TensorFlow方法完成整個過程。它是否正確?

+0

你能重新表達這個問題嗎? – fabrizioM

+0

當然,但以哪種方式? – arm

回答

1

簡短的回答在numpy上執行pair/triplet創建,無需將其轉換爲張量,因爲feed_dict參數已接受numpy數組。

最好是結合使用tf.nn.embedding_lookup()從已經存在的批次,itertools創建對的指數,但對一個天真的非最優的解決方案,你可以看看gen_batches_siamese.py腳本my github repository。我在哪裏重新實現了caffe暹羅例子。 顯然它比使用張量流隊列的效率要低,但我的建議是在進入純張量流解決方案之前首先嚐試這個基線。

+0

您的解決方案是否適合無法裝入機器RAM的數據集? – yuval

+1

實際上,您不得不使用numpy或Tensorflow隊列的內存映射。 – jean

相關問題