Разделение данных временного ряда в набор данных с сохранением с помощью API данных тензорного потока - PullRequest
0 голосов
/ 05 ноября 2019

Я пытался использовать tf.data.Dataset для пакетной обработки и разделения данных временных рядов с учетом состояния, но не могу заставить его работать. Вот ссылка на документы: https://www.tensorflow.org/api_docs/python/tf/data/Dataset

Вот что я пытаюсь достичь:

import tensorflow as tf
import numpy as np

Допустим, у нас есть данные, форма = (10,100,1) с 10 даннымивыборки, каждая с 100 выборками времени и 1 функцией

x = np.reshape(np.arange(1000), (10, 100, 1))
print(x.shape)
print(x[0, :, 0])
print(x[1, :, 0])

Out:

(10, 100, 1)
[000 001 ... 098 099]
[100 101 ... 198 199]

Где диапазоны 0-99, 100-199 ..., 900-999 одинаковывременные ряды, но, например, 150 и 250 не связаны между собой.

Теперь мы хотим обучить RNN / GRU / LSTM, где партия (2, 25, 1). Это означает, что мы должны разделить измерение выборки на 5, а измерение времени на 4.

x = np.split(x, 5, axis=0)
print(len(x), x[0].shape)

Out:

5 (2, 100, 1)

и ...

x = [np.split(item, 4, axis=1) for item in x]
print(len(x),len(x[0]), x[0][0].shape)

Out:

5 4 (2, 25, 1)

теперь первая партия должна быть:

    [  0   1 ...  23  24]
    [100 101 ... 123 124]

, а вторая партия должна быть:

    [ 25  26 ...  48  49]
    [125 126 ... 148 149]

, потому что это обеспечит подготовку кбыть состоящим из состояний.

Следующее ...

print(np.squeeze(x[0][0]))
print(np.squeeze(x[0][1]))

Out:

[[  0   1 ...  23  24]
 [100 101 ... 123 124]]
[[ 25  26 ...  48  49]
 [125 126 ... 148 149]]

может быть достигнуто через

x = np.concatenate([np.concatenate(item, axis=0) for item in x], axis=0)
dataset = tf.data.Dataset.from_tensor_slices(x)
final_dataset = dataset.batch(2)

, так что

for x in final_dataset:
    print(np.squeeze(x.numpy()))
    print('###')

Out:

[[  0   1 ...  23  24]
 [100 101 ... 123 124]]
###
[[ 25  26 ...  48  49]
 [125 126 ... 148 149]]
###
[[ 50  51 ...  73  74]
 [150 151 ... 173 174]]
###
[[ 75  76 ...  98  99]
 [175 176 ... 198 199]]
###
[[200 201 ... 223 224]
 [300 301 ... 323 324]]
###
...

Где после 199 заканчивается первое «состояние».

Мой вопрос: есть ли способ сделать то же самое, но начать сздесь:

dataset = tf.data.Dataset.from_tensor_slices(np.reshape(np.arange(1000), (10, 100, 1))) 

Далее:

Что если данные имеют форму = (13,100,1), то ось = 0 является простой и tf / np.split не будет работать.

Что если данные имеют форму = (10,101,1), то ось = 1 проста и tf / np.split не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...