跳过 TFRecordDataset.map() 中的数据集条目
Skip Dataset entries in TFRecordDataset.map()
如何在生成 TFRecordDataset 时跳过 TFRecord 文件中的条目?
给定一个 TFRecord
文件和 tf.contrib.data.TFRecordDataset
对象,我通过 map
对 protobuf 定义创建一个新数据集。例如,
features = {'some_data': tf.FixedLenFeature([], tf.string)}
def parser(example_proto):
e = tf.parse_single_example(example_proto, features)
data = e['some_data']
# ...do a bunch of stuff to data...
return data
x = TFRecordDataset(filename)
x = x.map(parser)
x = x.cache(cache_filename)
x = x.repeat()
x = x.batch(batch_size)
这让我可以读取数据并进行一些预处理,然后缓存结果并为我的模型进行批处理。
我的问题是,如果我想跳过其中一个 TFRecord 条目(例如,如果数据是 invalid/bad)怎么办?例如,在 parser()
中,也许我可以 return None
或某种 tf.cond
来指示无效条目,或触发某些断言。
(将评论总结为答案)
Dataset
的 filter()
方法可以根据谓词过滤条目。
如何在生成 TFRecordDataset 时跳过 TFRecord 文件中的条目?
给定一个 TFRecord
文件和 tf.contrib.data.TFRecordDataset
对象,我通过 map
对 protobuf 定义创建一个新数据集。例如,
features = {'some_data': tf.FixedLenFeature([], tf.string)}
def parser(example_proto):
e = tf.parse_single_example(example_proto, features)
data = e['some_data']
# ...do a bunch of stuff to data...
return data
x = TFRecordDataset(filename)
x = x.map(parser)
x = x.cache(cache_filename)
x = x.repeat()
x = x.batch(batch_size)
这让我可以读取数据并进行一些预处理,然后缓存结果并为我的模型进行批处理。
我的问题是,如果我想跳过其中一个 TFRecord 条目(例如,如果数据是 invalid/bad)怎么办?例如,在 parser()
中,也许我可以 return None
或某种 tf.cond
来指示无效条目,或触发某些断言。
(将评论总结为答案)
Dataset
的 filter()
方法可以根据谓词过滤条目。