【发布时间】:2018-04-26 15:12:34
【问题描述】:
我正在阅读 TensorFlow benchmarks repo 中的代码。以下代码是从 TFRecord 文件创建 TensorFlow 数据集的部分:
ds = tf.data.TFRecordDataset.list_files(tfrecord_file_names)
ds = ds.apply(interleave_ops.parallel_interleave(tf.data.TFRecordDataset, cycle_length=10))
我正在尝试更改此代码以直接从 JPEG 图像文件创建数据集:
ds = tf.data.Dataset.from_tensor_slices(jpeg_file_names)
ds = ds.apply(interleave_ops.parallel_interleave(?, cycle_length=10))
我不知道该写什么?地方。 parallel_interleave() 中的 map_func 是 TFRecord 文件的 tf.data.TFRecordDataset 类的 __init__(),但我不知道为 JPEG 文件写什么。
我们不需要在这里做任何转换。因为我们将压缩两个数据集,然后再进行转换。代码如下:
counter = tf.data.Dataset.range(batch_size)
ds = tf.data.Dataset.zip((ds, counter))
ds = ds.apply( \
batching.map_and_batch( \
map_func=preprocess_fn, \
batch_size=batch_size, \
num_parallel_batches=num_splits))
因为我们不需要在 ?地方,我尝试使用一个空的map_func,但是出现错误“map_funcmust return aDataset`对象”。我也尝试使用 tf.data.Dataset,但输出显示 Dataset 是一个抽象类,不允许放在那里。
有人可以帮忙吗?非常感谢。
【问题讨论】:
-
一开始为什么要使用
parallel_interleave?当您想要读取从磁盘或网络中检索数据并且速度可能很慢的多个数据集时,它很有用。在你的情况下,听起来你不需要那个。如果是这样,当您跳过这一步时,确切的问题是什么?
标签: python tensorflow