3
我正在使用tensorflow的dataset API。並用簡單的情況測試我的代碼。下面顯示了我使用的簡單代碼。問題是,當數據集大小很小時,似乎來自數據集API的返回大小不一致。我確信有一個適當的方法來處理它。但即使我閱讀了該頁面和教程中的所有功能,但我無法找到它。tensorflow的數據集API的返回大小不是常數
import numpy as np
import tensorflow as tf
data_source = tf.zeros([24, 200, 64, 64, 1]) #[number_of_video, steps, pixel_w, pixel_h, channel]
dataset = tf.contrib.data.Dataset.from_tensor_slices(data_source)
dataset = dataset.shuffle(buffer_size=100)
dataset = dataset.batch(16)
dataset = dataset.repeat()
iterator = tf.contrib.data.Iterator.from_structure(dataset.output_types, dataset.output_shapes)
next_element = iterator.get_next()
training_init_op = iterator.make_initializer(dataset)
with tf.Session() as sess:
sess.run(training_init_op)
next_elem = next_element.eval()
print(np.shape(next_elem))
next_elem = next_element.eval()
print(np.shape(next_elem))
next_elem = next_element.eval()
print(np.shape(next_elem))
next_elem = next_element.eval()
print(np.shape(next_elem))
next_elem = next_element.eval()
print(np.shape(next_elem))
next_elem = next_element.eval()
print(np.shape(next_elem))
next_elem = next_element.eval()
print(np.shape(next_elem))
該數據集是灰度視頻。共有24個視頻序列,步長爲200.幀大小爲64乘64,單通道。我設置批量大小爲16和緩衝區大小爲100,但該代碼的結果是,
(16, 200, 64, 64, 1)
(8, 200, 64, 64, 1)
(16, 200, 64, 64, 1)
(8, 200, 64, 64, 1)
(16, 200, 64, 64, 1)
(8, 200, 64, 64, 1)
(16, 200, 64, 64, 1)
視頻的返回的大小是16或8。我想這是因爲原來的數據尺寸小, 24,當它到達數據的末尾時,API只返回剩下的內容。
但我不明白。我還將緩衝區大小設置爲100.這意味着緩衝區應該預先填充小數據集。並從該緩衝區中,API應選擇批量大小爲16的next_element。
當我在tensorflow中使用隊列類型API時,我沒有這個問題。無論原始數據的大小如何,無論如何,迭代器到達數據集的末尾時都會有一個時刻。我想知道這個問題是如何被其他使用這個API的人解決的。