我目前有一个数据集,已使用
第一个月
它已经被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()
,但这同样返回一个不可索引的迭代器。
1条答案
按热度按时间col17t5w1#
TL;DR:您必须以支持随机访问的文件格式重新生成数据。
tfds.data_source
需要array_record
数据格式,因为它支持随机访问。所以你必须使用file_format='array_record'
准备数据。当省略file_format
时,它隐式默认为tfrecord,这就是为什么你不能受益于随机访问。要解决这个问题:字符串
如果数据集已经存在于
data_dir
中,则必须将其从Flags.data_dir
中删除,以便下载并重新准备正确的文件格式。或者,您可以在另一个data_dir
中下载并准备。file_format
可以和tfds.data_source
一起使用(如上面的代码片段所示,这相当于tfds.load),也可以和tfds.builder
(tfds.builder(..., file_format='array_record')
)一起使用。