python - 来自 avro 文件的 tf.data.dataset
问题描述
我正在尝试使用tf.data.Dataset
and并行化我的输入管道TFRecordDataset
。
files = tf.data.Dataset.list_files("./data/*.avro")
dataset = tf.data.TFRecordDataset(files, num_parallel_reads=16)
dataset = dataset.apply(tf.contrib.data.map_and_batch(
preprocess_fn, 512, num_parallel_batches=16) )
preprocess_fn
如果输入是 AVRO 文件(类似于 JSON),我不确定如何编写。
目前,我正在使用并提供由或类似的 avro 阅读器tf.data.Dataset.from_generator
解析的 avro 记录。pyavroc
但我不确定如何并行化它,因为from_generator
方法没有可用的num_parallel_reads
选项。
def gen():
for file in all_avro_files:
x, y = read_local_avro_data(file)
for i, sample in enumerate( x ):
yield sample, y[i]
dataset = tf.data.Dataset.from_generator( gen,
(tf.float32, tf.float64),
( tf.TensorShape([13000]), tf.TensorShape([])
)
)
逐个文件读取显然是一个瓶颈,我看到所有内核在用完前一批数据后都在等待数据。
如何优化这两种方法?
解决方案
推荐阅读
- swift - 使用 Swift 在 macOS 上显示 Unobtrusive 消息
- python - 根据其他列标记添加4个新列,并分配1或0
- node.js - Node.js HTTP Get 流在 docker 容器内冻结
- ios - 如何通过 Swift UI 中的按钮单击将 Textfield 值传递给视图控制器
- css - 复选框上的背景颜色不设置颜色
- java - 在网络调用后追踪 ConcurrentModificationException 的原因
- elasticsearch - 根据消息字段创建索引 - appname
- database - 从共享主机备份大型数据库。如何?
- flutter - 当我在 Flutter 的 Hive Db 中添加元素时,如何修复错误路由长度被调用为 null?
- python - 无法在自定义编码器中将 dict 编码为 JSON