tf.keras.utils.timeseries_dataset_from_array
Создаёт набор данных из скользящих окон над временным рядом, представленным массивом.
tf.keras.utils.timeseries_dataset_from_array(
data,
targets,
sequence_length,
sequence_stride=1,
sampling_rate=1,
batch_size=128,
shuffle=False,
seed=None,
start_index=None,
end_index=None
)
Эта функция принимает последовательность точек данных, собранных с равными интервалами, вместе с параметрами временного ряда, такими как длина последовательностей/окон, интервал между двумя последовательностями/окнами и т. д., для получения партий входных и целевых данных временного ряда.
| Аргументы | |
|---|---|
data | Массив NumPy или eager тензор, содержащий последовательные точки данных (шаги времени). Ожидается, что ось 0 будет осью времени. |
targets | Целевые значения, соответствующие шагам времени в data. targets[i] должен быть целевым значением, соответствующим окну, которое начинается в индексе i (см. пример 2 ниже). Передайте None, если у вас нет целевых данных (в этом случае набор данных будет возвращать только входные данные). |
sequence_length | Длина выходных последовательностей (в количестве шагов времени). |
sequence_stride | Период между последовательными выходными последовательностями. Для шага s, выходные образцы начинались бы с индекса data[i], data[i + s], data[i + 2 * s], и т. д. |
sampling_rate | Период между последовательными отдельными шагами времени в последовательностях. Для шага r, шаги времени data[i], data[i + r], ... data[i + sequence_length] используются для создания образца последовательности. |
batch_size | Количество образцов временного ряда в каждой партии (кроме, возможно, последней). Если None, данные не будут сгруппированы в партии (набор данных будет возвращать отдельные образцы). |
shuffle | Нужно ли перемешивать выходные образцы или, наоборот, извлекать их в хронологическом порядке. |
seed | Необязательное целое число; случайное семя для перемешивания. |
start_index | Необязательное целое число; точки данных, предшествующие (исключительно) start_index, не будут использоваться в выходных последовательностях. Это полезно для выделения части данных для тестирования или валидации. |
end_index | Необязательное целое число; точки данных, последующие (исключительно) за end_index, не будут использоваться в выходных последовательностях. Это полезно для выделения части данных для тестирования или валидации. |
| Возвращаемое значение | |
|---|---|
Экземпляр tf.data.Dataset. Если targets был передан, набор данных возвращает кортеж (batch_of_sequences, batch_of_targets). В противном случае набор данных возвращает только batch_of_sequences. |
Пример 1:
Рассмотрим индексы [0, 1, ... 99]. С sequence_length=10, sampling_rate=2, sequence_stride=3, shuffle=False, набор данных будет возвращать партии последовательностей, состоящих из следующих индексов:
First sequence: [0 2 4 6 8 10 12 14 16 18] Second sequence: [3 5 7 9 11 13 15 17 19 21] Third sequence: [6 8 10 12 14 16 18 20 22 24] ... Last sequence: [78 80 82 84 86 88 90 92 94 96]
В этом случае последние 3 точки данных отбрасываются, так как нельзя сгенерировать полную последовательность, которая их включает (следующая последовательность началась бы с индекса 81, а её последний шаг перешел бы за 99).
Пример 2: Временная регрессия.
Рассмотрим массив data скалярных значений формы (steps,). Чтобы сгенерировать набор данных, который использует 10 предыдущих шагов времени для предсказания следующего шага времени, нужно использовать:
input_data = data[:-10]
targets = data[10:]
dataset = tf.keras.preprocessing.timeseries_dataset_from_array(
input_data, targets, sequence_length=10)
for batch in dataset:
inputs, targets = batch
assert np.array_equal(inputs[0], data[:10]) # First sequence: steps [0-9]
assert np.array_equal(targets[0], data[10]) # Corresponding target: step 10
break
Пример 3: Временная регрессия для архитектур «многие-ко-многим».
Рассмотрим два массива скалярных значений X и Y, оба формы (100,). Результирующий набор данных должен содержать образцы с 20 шагами времени каждый. Образцы не должны перекрываться. Чтобы сгенерировать набор данных, который использует текущий шаг времени для предсказания соответствующего целевого шага времени, нужно использовать:
X = np.arange(100) Y = X*2 sample_length = 20 input_dataset = tf.keras.preprocessing.timeseries_dataset_from_array( X, None, sequence_length=sample_length, sequence_stride=sample_length) target_dataset = tf.keras.preprocessing.timeseries_dataset_from_array( Y, None, sequence_length=sample_length, sequence_stride=sample_length) for batch in zip(input_dataset, target_dataset): inputs, targets = batch assert np.array_equal(inputs[0], X[:sample_length]) # second sample equals output timestamps 20-40 assert np.array_equal(targets[1], Y[sample_length:2*sample_length]) break
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/keras/utils/timeseries_dataset_from_array