Использование TF timeseries_dataset_from_array с большим количеством образцов

#python #tensorflow #time-series #data-preprocessing

#питон #тензорный поток #временные ряды #предварительная обработка данных

Вопрос:

Мне приходится обрабатывать огромное количество образцов, где каждый образец содержит уникальные временные ряды. Цель состоит в том, чтобы ввести эти данные в модель Tensorflow LSTM и спрогнозировать некоторые функции. Я создал функцию tf timeseries_dataset_from_array генератора для передачи данных в модель TF, но я не понял, как создать функцию генератора, когда у меня есть несколько образцов. Если я использую обычный конвейер, tf timeseries_dataset_from_array перекрывайте временные ряды двух отдельных выборок.

У кого-нибудь есть идея, как эффективно передать временной ряд из нескольких выборок в модель TF?

Например, Набор данных распознавания человеческой деятельности является одним из таких наборов данных, в котором у каждого человека есть отдельный длинный временной ряд, и временные ряды каждого пользователя могут быть дополнительно проанализированы с помощью функции, подобной СКОЛЬЗЯЩЕМУ/СКОЛЬЗЯЩЕМУ WINDOS. timeseries_dataset_from_array

Вот более простой пример:

Я хочу использовать timeseries_dataset_from_array для создания образцов для модели TF. Пример: пример 1, где столбец 0 содержит 0, пример 2 начинается с столбца 0, содержащего 100. Вот более простой пример:

введите описание изображения здесь

Я хочу получить 3D-данные (образцы, временные интервалы, объекты) без перекрытия.Например (6,2,7), Как это:

введите описание изображения здесь

Делает

Вот пример кода:

 from tensorflow.keras.preprocessing import timeseries_dataset_from_array import numpy as np  x = np.array([[0,1,2,3,4,5,6],  [0,11,12,13,14,15,16],  [0,21,22,23,24,25,26],  [0,31,32,33,34,35,36],  [0,41,42,43,44,45,46]   ])  xx = np.concatenate((x, x 100), axis=0)#.reshape(2,5,6)    sequence_length=2 stride=1 rate=1 input_dataset = timeseries_dataset_from_array(xx,  None,  sequence_length,  sequence_stride=stride,  sampling_rate=rate)  x_test = np.concatenate([x for x in input_dataset], axis=0)  

Ответ №1:

Я нашел решение, которое позволяет избежать проблемы перекрытия

 ### solution ######    # reshape the dataset  xxx = xx.reshape(2,5,7)   # create two tensorflow datasets input_dataset0 = timeseries_dataset_from_array(xxx[0,:,:],  None,  sequence_length,  sequence_stride=stride,  sampling_rate=rate) input_dataset1 = timeseries_dataset_from_array(xxx[1,:,:],  None,  sequence_length,  sequence_stride=stride,  sampling_rate=rate) # concatenate the two tensorflow datasets input_dataset = input_dataset0.concatenate(input_dataset1)  x_test = np.concatenate([x for x in input_dataset], axis=0)