【问题标题】:Tensorflow Dataset API with HDFS带有 HDFS 的 TensorFlow 数据集 API
【发布时间】:2018-02-09 03:23:08
【问题描述】:

我们在 HDFS 目录中存储了 *.tfrecord 文件列表。我想使用新的 Dataset API,但给出的唯一示例是使用旧的 filequeue 和 string_input_producer (https://www.tensorflow.org/deploy/hadoop)。这些方法使得除其他外难以生成纪元。

有什么方法可以通过 Dataset API 使用 HDFS?

【问题讨论】:

    标签: tensorflow hdfs tensorflow-datasets


    【解决方案1】:

    HDFS 文件系统层可与旧的基于队列的 API 和新的 tf.data API 一起使用。假设你已经按照TensorFlow/Hadoop deployment guide配置了你的系统,你可以使用以下代码基于HDFS中的文件创建一个数据集:

    dataset = tf.data.TFRecordDataset(["hdfs://namenode:8020/path/to/file1.tfrecords",
                                       "hdfs://namenode:8020/path/to/file2.tfrecords"])
    dataset = dataset.map(lambda record: tf.parse_single_example(record, ...)
    # ...
    

    请注意,由于 HDFS 是一个分布式文件系统,您可能会从输入管道性能指南的 "Parallelize data extraction" 部分中的一些建议中受益。

    【讨论】:

    • 在分布式tensorflow训练中,tf.contrib.data.parallel_interleave从hdfs加载数据,是否需要手动将数据集拆分到不同的目录,才能让每个work读取整个数据集的不同部分?
    • 不同的目录是一种方法,但您也可以使用Dataset.list_files(..., shuffle=False).shard(num_workers, worker_id) 确保每个工作人员读取文件集的不同部分。
    • 您的链接已损坏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2018-08-22
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 2019-04-01
    • 2022-01-04
    相关资源
    最近更新 更多