使用HDFS的Tensorflow数据集API

6
我们在HDFS目录中存储了一个*.tfrecord文件列表。我想使用新的Dataset API,但唯一给出的示例是使用旧的filequeue和string_input_producer (https://www.tensorflow.org/deploy/hadoop)。这些方法使得生成epochs等变得困难。
是否有办法在Dataset API中使用HDFS?
1个回答

13

HDFS文件系统层可同时使用旧的基于队列的API和新的tf.data API。假设您已根据TensorFlow/Hadoop部署指南配置了您的系统,您可以使用以下代码基于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是分布式文件系统,因此您可能会从输入管道性能指南中的“并行化数据提取”部分的一些建议中受益。


在分布式 TensorFlow 训练中,使用 tf.contrib.data.parallel_interleave 从 HDFS 加载数据时,我需要手动将数据集拆分到不同的目录中,以便每个工作读取整个数据集的不同部分吗? - 宇宙人
3
使用不同的目录是一种方法,但你也可以使用 Dataset.list_files(..., shuffle=False).shard(num_workers, worker_id) 来确保每个工作进程读取文件集的不同部分。 - mrry
你的链接已经失效。 - luoluo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接