Я работаю над конвейером TensorFlow, где я загружаю кучу сигналов в набор данных, я перетасовываю эти сигналы, затем выполняю управление окнами для сигналов, а затем пакетирую и повторяю. Этот набор данных используется для обучения модели tf.keras с помощью вызова функции model.fit. Очень важно, чтобы окна сигнала не были перетасованы, поэтому это порядок преобразований набора данных.
Мне интересно, будет ли порядок сигналов перетасовываться между эпохами? Я обнаружил, что 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, ...)
Редактировать: интересующее меня поведение заключается в том, что я хотел бы, чтобы порядок сигналов менялся с каждой эпохой. Итак, если у меня есть 3 сигнала
signal0=[window0_0,window0_1]
signal1=[window1_0,window1_1,window1_2]
signal2=[window2_0]
тогда результат будет выглядеть примерно так:
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])
где transform datset.map (windowing) .shuffle (). Batch (). Repeat () выдаст что-то подобное (что меня не интересует)
tf.Tensor([window0_1,window1_1,window2_0,window1_0,window0_0,window1_2])
tf.Tensor([window0_0,window1_2,window0_1,window2_0,window1_1,window1_0])