我将使用this code写入TFRecord文件:
writer = tf.python_io.TFRecordWriter(output_filename)
print("Creating TFRecords file at {}...".format(output_filename))
for i, row in enumerate(create_csv_iter(input_filename)):
x = example_fn(row)
writer.write(x.SerializeToString())
writer.close()
问题是这个过程非常缓慢,因此即使在几天内编写大型数据集也是不可行的! 它只是一个序列化到磁盘的编写器。为什么这么慢?!另一个问题是输出文件的大小是原始文件的10倍!
你知道如何加快TFRecordWriter的进程并压缩结果吗?
答案 0 :(得分:0)
我不知道速度问题,但您可以在事后进行压缩 - TFRecordReader
支持GZIP和ZLIB压缩,例如
reader = tf.TFRecordReader(
options=tf.python_io.TFRecordOptions(
compression_type=tf.python_io.TFRecordCompressionType.ZLIB
)
)
_, tfrecord = reader.read(file_queue)
# etc.
查看更多here。解压缩需要一些时间,但是如果您正在使用TF批处理系统,那么您在开始时才真正注意到它(因此CPU内核可以在GPU工作时解压缩并填充队列等)。
答案 1 :(得分:0)
当我要使用的数据集创建和预处理非常昂贵时,我遇到了类似的问题。
使用TFRecordWriter的速度非常慢,所以我改用了数据集对象上可用的缓存选项。
ds.cache('./cache/train.cache').repeat().batch(32).prefetch(1)
创建的文件与TFRRecordWriter创建的文件大小大致相同,但是它们的创建速度与您期望的速度相同。
此外,例如,当您重新启动笔记本计算机时,如果文件仍然可用,则会自动使用它们。