python - Tensorflow - 使用parallel_interleave从多个tfrecord中读取不同的block_lengths?
问题描述
我正在尝试读取三个不同长度的大型 tfrecord,并像这样并行读取它们:
files = [ filename1, filename2, filename3 ]
data = tf.data.TFRecordDataset(files)
data = data.apply(
tf.contrib.data.parallel_interleave(
lambda filename: tf.data.TFRecordDataset(data),
cycle_length=3,block_length = [10,5,3]))
data = data.shuffle(
buffer_size = 100)
data = data.apply(
tf.contrib.data.map_and_batch(
map_func=parse,
batch_size=100))
data = data.prefetch(10)
,但 TensorFlow 不允许每个文件源使用不同的块长度:
InvalidArgumentError: block_length must be a scalar
我可以创建三个具有不同小批量大小的不同数据集,但这需要 3 倍的资源,而且这不是我的机器限制所提供的选项。
有哪些可能的解决方案?
解决方案
这是答案,我想出了如何在我的限制范围内做到这一点。
为每个文件制作数据集,为每个文件定义每个小批量大小,并将 get_next() 输出连接在一起。这适合我的机器并高效运行。
推荐阅读
- c# - 验证 ADFS 帐户活动 C#
- python - 如何使用 pywinauto 使窗口(已经运行的任务)可见?
- c++ - 如何正确设置 SonarQube cfamil.gcov?
- r - 运行回归并将模型估计提取到 R 中的数据框
- node.js - 错误:节点中的肥皂客户端的 XML 格式无效(联邦快递)
- ldap - Apache 2.4.7 setenvif 为 require 指令构建 LDAP 组名
- matlab - 在 Matlab 的工作区中更改变量的名称
- build - _work 目录中的增量
- kendo-ui - 第一次通话后剑道系列点击事件不起作用
- android - 如何在 Android Studio 中获取特定手机屏幕的特定 xml 布局