2017-01-02 44 views
2

如何檢查string_input_producer讀取的文件名數量?根據輸入數據的大小,將執行不同的操作,所以我需要知道將讀取或讀取多少圖像。tensorflow獲取string_input_producer的大小

下面的代碼不告訴我有多少圖片我已閱讀或即將閱讀。

import tensorflow as tf 
import matplotlib.pyplot as plt 

# Make a queue of file names including all the JPEG images files in the relative image directory. 
filename_queue = tf.train.string_input_producer(tf.train.match_filenames_once("./MNIST_data/*.png")) 

reader = tf.WholeFileReader() 
key, value = reader.read(filename_queue) 

image = tf.image.decode_png(value) # use png or jpg decoder based on your files. 

num_preprocess_threads = 1 
min_queue_examples = 256 
batch_size=2; 
images = tf.train.shuffle_batch([image], batch_size, min_queue_examples + 3 * batch_size, num_threads=num_preprocess_threads, min_after_dequeue=min_queue_examples) 

with tf.Session() as sess: 
    sess.run(tf.initialize_all_variables()) 

    coord = tf.train.Coordinator() 
    threads = tf.train.start_queue_runners(coord=coord) 
    t_image = image.eval() #here is your image Tensor :) 
    fig = plt.figure() 
    plt.imshow(t_image) 
    plt.show() 

    coord.request_stop() 
    coord.join(threads) 

回答

1

string_input_producer等功能將一個隊列添加到當前圖其可以每次只出隊只是一個例子。通常情況下,輸出張量將被饋送到像tf.train.shuffle_batch這樣的函數,這正是你想要的。這個函數的自變量batch_size可以控制每次多少例子離隊作爲模型的輸入

UPDATE:

,如果你想查詢你的輸入數據是否正確,你可以用sess.run(my_img)跑出來這會給你一個numpy.array張量。您可以直接查看張量的元素,或者將其繪製爲matplotlib

確保您sess.run前已經開始排隊跑步或你的程序將被掛起永遠

+0

你有你的答案算法?我編輯我的代碼包括shuffle_batch但即時通訊錯誤。你能顯示完整的代碼來閱讀圖像然後繪圖嗎?請fensortlow硬是 – kong

+1

你得到哪種錯誤?我看了你的代碼,我認爲沒關係 –

+0

它說所有的形狀都必須完全定義。錯誤指向tf.train.shuffle_batch – kong

0

string_input_producer回報你回到一個標準FIFOQueue(它會返回一個input_producer並返回你queue

一個FIFOQueue沒有關於它讀取的元素數量的信息,只有元素數量當前在隊列中(q.size())。如果你想知道有多少元素已經被讀取,你需要手動添加一個計數器,你將每次增加一個計數器當你閱讀一個元素。