为什么'tf.python_io.TFRecordWriter'在TensorFlow中如此缓慢和存储消耗?

时间:2016-08-30 19:07:27

标签: tensorflow

我将使用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的进程并压缩结果吗?

2 个答案:

答案 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创建的文件大小大致相同,但是它们的创建速度与您期望的速度相同。

此外,例如,当您重新启动笔记本计算机时,如果文件仍然可用,则会自动使用它们。