我正在开发一个 TensorFlow 管道,将一堆信号加载到数据集中,对这些信号进行洗牌,然后对信号进行加窗,然后进行批处理并重复。该数据集用于通过 model.fit 函数调用来训练 tf.keras 模型。信号窗口不被打乱非常重要,这就是为什么这是数据集变换的顺序。
我想知道信号的顺序是否会在纪元之间被打乱?我发现这dataset.shuffle().batch().repeat()会在纪元之间对数据集进行洗牌,但这对我的应用程序不起作用,因为我需要在洗牌后进行窗口和其他转换。
我使用的是 TensorFlow 版本 1.13.1。
#... some pre-processing on the signals
signalList = [...] # a list of tuples (data, label)
dataset = tf.data.Dataset.from_generator(lambda: signalList)
dataset = dataset.shuffle(buffer_size=self.buffer_size) ## will this shuffle be repeated??
dataset = dataset.map(...) # windowing and other transforms
dataset = dataset.batch()
dataset = dataset.repeat()
model.fit(dataset, ...)
Run Code Online (Sandbox Code Playgroud)
编辑:我感兴趣的行为是我希望每个时期重新调整信号的顺序。所以,如果我有 3 个信号
signal0=[window0_0,window0_1]
signal1=[window1_0,window1_1,window1_2]
signal2=[window2_0]
Run Code Online (Sandbox Code Playgroud)
那么输出将如下所示:
tf.Tensor([signal0,signal2,signal1],...) # equivalent to tf.Tensor([window0_0,window0_1,window2_0,window1_0,window1_1,window1_2])
tf.Tensor([signal1,signal0,signal2],...) # equivalent to tf.Tensor([window1_0,window1_1,window1_2,window0_0,window0_1,window2_0])
Run Code Online (Sandbox Code Playgroud)
其中转换 datset.map(windowing).shuffle().batch().repeat() 会产生类似这样的东西(我对此不感兴趣)
tf.Tensor([window0_1,window1_1,window2_0,window1_0,window0_0,window1_2]) …Run Code Online (Sandbox Code Playgroud)