为啥 TensorFlow 中的 'tf.python_io.TFRecordWriter' 如此缓慢且占用存储空间?

Posted

技术标签:

【中文标题】为啥 TensorFlow 中的 \'tf.python_io.TFRecordWriter\' 如此缓慢且占用存储空间?【英文标题】:Why 'tf.python_io.TFRecordWriter' is so SLOW and STORAGE-CONSUMING in TensorFlow?为什么 TensorFlow 中的 'tf.python_io.TFRecordWriter' 如此缓慢且占用存储空间? 【发布时间】:2017-01-07 04:47:33 【问题描述】:

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

【问题讨论】:

你找到提高IO速度的方法了吗? 对这个问题的解决仍然非常感兴趣。 【参考方案1】:

我不知道速度问题,但你可以在事后压缩 - 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 工作时解压并填充您的队列等)。

【讨论】:

您可以使用以下命令直接写入压缩的 tfrecord,tf_record_options = tf.python_io.TFRecordOptions(tf.python_io.TFRecordCompressionType.GZIP)writer = tf.python_io.TFRecordWriter(output_filepath, options=tf_record_options)【参考方案2】:

当我想使用的数据集的创建和预处理成本很高时,我遇到了类似的问题。

使用 TFRecordWriter 非常慢,因此我使用了 Dataset 对象上可用的缓存选项。

ds.cache('./cache/train.cache').repeat().batch(32).prefetch(1)

创建的文件与 TFRRecordWriter 创建的文件大小大致相同,但它们是以您期望的速度创建的。

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

【讨论】:

以上是关于为啥 TensorFlow 中的 'tf.python_io.TFRecordWriter' 如此缓慢且占用存储空间?的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow对象检测:为啥使用ssd mobilnet v1时图像中的位置会影响检测精度?

为啥TensorFlow要重新实现很多数学方程?

为啥这个 tensorflow 训练需要这么长时间?

Tensorflow:为啥'pip uninstall tensorflow'找不到tensorflow

为啥 TensorFlow Lite 比桌面版 TensorFlow 慢?

为啥在windows下用不了tensorflow