我有一个原始时间序列数据的数据集,该数据集存储在磁盘上的TFRecords中:
dataset = TFRecordDataset(tfrecords) # tfrecords is a list of filenames
dataset = dataset.map(lambda x: do_something(x))
dataset = dataset.shuffle(1024)
dataset = dataset.repeat()
dataset = dataset.batch(128)
我希望我的do_something
函数要做的是,对于每个原始实例,随机获取数据的一部分,以使实例中的数据窗口变小。但是在下一个时期,我想确保从每个实例中得到一个不同随机切片。我的主要问题是,如果将随机性引入map
函数(即我的do_something
函数)中,它将:
我渴望(2),所以如果那没有发生,有没有其他方法可以实现呢?
例如,假设我有100个初始样本,每个样本有50个数据点的时间序列。我想生成2000个较小切片的样本,例如5个数据点切片。如果我在map
函数中随机选择切片,我会在每个repeat
上获得相同的100个5个数据点切片,还是有办法获得100个 different < / em>每次循环100个(50个数据点)初始样本时,都会有5个数据点切片吗?
答案 0 :(得分:0)
在do_something
中不考虑tf.data
函数的情况下,只要您在shuffle
之前进行过repeat
操作,就可以保证直到任何样本都不会重复所有样本都迭代一次。因此,默认情况下,您必然会获得第二个特征,即在每个时期为每个原始实例提供不同的随机切片。
接下来,map
函数用于预处理内容。这可能类似于标准化数据输入,或从文件名读取图像等。您不应该使用map
来随机整理数据。您应该允许shuffle
操作对数据执行随机改组。
编辑:
您的问题对我来说还不太清楚,但是我相信您在50个数据点中每个都有100个样本(让我们称它们为主要样本),并且在map函数内部,您将随机选择从中切出5分(我们称其为 subsamples )。无论我最初写的是什么内容,对于主要样本都是如此。在每个batch
中生成100个主要样本,您将没有任何问题。但是在子样本级别,可重复性取决于您如何在本地编写do_something
函数。
答案 1 :(得分:0)
每个时期您将获得不同的随机切片。每个时期都会再次调用您的map
函数,因此只要您的map
函数每次被调用生成不同的片段,您就会获得不同的片段。