gpt4 book ai didi

Tensorflow - 从单个大 txt 文件读取数据的正确方法

转载 作者:行者123 更新时间:2023-12-03 09:44:45 25 4
gpt4 key购买 nike

我想问一下使用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

顺便提一句。我正在使用批量大小 500。
有什么建议?

最佳答案

申请 tf.parse_example() 通常效率更高对一批元素比应用 tf.parse_single_example() 在每个单独的元素上,因为前一个操作具有高效的多线程实现,可以在输入包含多个示例时使用。代码的以下重写应该可以提高性能:

filename_queue = tf.train.string_input_producer([self._train_data], num_epochs=self._num_epochs)

reader = tf.TFRecordReader()

# Read a batch of up to 128 examples at once.
_, serialized_examples = reader.read_up_to(filename_queue, 128)

features = tf.parse_example(
serialized_examples,
# 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

# Pass `enqueue_many=True` because the input is now a batch of parsed examples.
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,
enqueue_many=True)

关于Tensorflow - 从单个大 txt 文件读取数据的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43193204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com