4
我想問一下使用tensorflow批量讀取大文本數據的正確模式?Tensorflow - 從單個大文本文件中讀取數據的正確方法
這是一行文本數據。單個txt文件中有數十億行這樣的數據。
target context label
現在我想tfrecords使用官方文檔中建議。
這裏是我的方式
filename_queue = tf.train.string_input_producer([self._train_data], num_epochs=self._num_epochs)
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)
features = tf.parse_single_example(
serialized_example,
# Defaults are not specified since both keys are required.
features={
'target': tf.FixedLenFeature([], tf.int64),
'context': tf.FixedLenFeature([], tf.int64),
'label': tf.FixedLenFeature([], tf.int64),
})
target = features['target']
context = features['context']
label = features['label']
min_after_dequeue = 10000
capacity = min_after_dequeue + 3 * self._batch_size
target_batch, context_batch, label_batch = tf.train.shuffle_batch(
[target, context, label], batch_size=self._batch_size, capacity=capacity,
min_after_dequeue=min_after_dequeue, num_threads=self._concurrent_steps)
之後,我用時間線做分析。結果表明這部分大部分時間都在使用。 這裏是剖析圖。 the profiling result
Btw。我正在使用批量大小500. 有什麼建議嗎?
您的CPU是否已滿載?如果不是,則可能需要使用更多線程(在'tf.train.shuffle_batch()'的'num_threads'參數中)解析文件中的記錄。其他可能性:你可以使用'reader.read_up_to(n)',''tf.parse_example()'而不是'tf.parse_single_example()',並且通過'enqueue_many = True'將'tf.train.shuffle_batch()'傳入爲了執行批量解析,這應該更有效率。 – mrry
@mrry這就是它我使用'reader.read_up_to(n)',''tf.parse_example()'每次讀取多行並解決問題。 –