2016-10-10 18 views
0

我的數據集由5-180秒之間的音頻片段組成。示例的數量足夠小以允許將其緩存到內存中,而不是一遍又一遍地從磁盤讀取數據。將數據存儲在常量張量/變量中並使用tf.train.slice_input_producer將允許我將數據集緩存在內存中,但它需要將所有數據存儲在一個矩陣中。由於一些例子比其他例子長得多,所以這個矩陣可能不必要地大,對於RAM可能太大。用不同長度的示例緩存數據集

我可以簡單地爲我的數據列出numpy數組,然後用feed_dict以non-tensforflow方式完成整個輸入讀取隨機化預處理,但是我想知道是否有一種方法可以在沒有完成的情況下完成放棄輸入讀取 - 隨機 - 預處理部分的張量流。

謝謝!

+0

怎麼樣使用'queue.dequeue_many(length_of_audio)' –

+0

你是什麼意思? – cruvadom

+1

將你的例子加載到隊列中而不是矩陣中,然後使用'queue.dequeue_many'將它們加載到各種長度的張量中 –

回答

1

最近的tf.data庫提供了一個tf.data.Dataset.cache方法來將整個數據集緩存到內存或文件中。

例如:

dataset = ... 
dataset = dataset.map(preprocessing_fn) # apply preprocessing 
dataset = dataset.cache() # cache entire dataset in memory after preprocessing 

我提供了關於如何在this answer使用cache()更多細節。