tensorflow 将tf.data.Dataset转换为tfds.data_source

sr4lhrrt  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(133)

我目前有一个数据集,已使用
第一个月
它已经被Map和操纵了几次。
我想在Pytorch中将其用作Pytorch数据集(使用数据加载器),但这需要它是可订阅的(使用__getitem__)。
一种方法是使用tensorflow data_source对象,如here所述。
然而,这是从一个构建器开始的,而我已经有了来自tfds.load的东西,它已经调用了builder.as_dataset而不是builder.as_data_source
有没有办法将我当前的数据集(ds_train, ds_test, ds_val)转换为外部使用的数据源?
我认为另一种可能的方法是tf.data.Dataset.as_numpy_iterator(),但这同样返回一个不可索引的迭代器。

col17t5w

col17t5w1#

TL;DR:您必须以支持随机访问的文件格式重新生成数据。

tfds.data_source需要array_record数据格式,因为它支持随机访问。所以你必须使用file_format='array_record'准备数据。当省略file_format时,它隐式默认为tfrecord,这就是为什么你不能受益于随机访问。要解决这个问题:

tfds.data_source(
  'speech_commands',
  split=splits,
  data_dir=Flags.data_dir,
  builder_kwargs={'file_format': 'array_record'},  # For random access
)

字符串
如果数据集已经存在于data_dir中,则必须将其从Flags.data_dir中删除,以便下载并重新准备正确的文件格式。或者,您可以在另一个data_dir中下载并准备。
file_format可以和tfds.data_source一起使用(如上面的代码片段所示,这相当于tfds.load),也可以和tfds.buildertfds.builder(..., file_format='array_record'))一起使用。

相关问题