Подготовка входных данных для LSTM в Keras / Tensorflow

Входная форма слоя LSTM (размер партии, временные шаги, функции). В настоящее время у меня есть ввод, который выглядит так:

[0,1,2,3,4,5,6,7,8,9,10]

Я использую свой код, чтобы изменить данные так, чтобы они выглядели так

[
[0,1,2,3],
[1,2,3,4],
[2,3,4,5],
[3,4,5,6],
[4,5,6,7],
[5,6,7,8],
[6,7,8,9],
[5,7,8,10]
]

Однако на преобразование этих данных в Python уходит много времени. Есть ли способ для модели LSTM в Keras / Tensorflow изучать данные исключительно из [0,1,2,3,4,5,6,7,8,9,10], где я определяю временной шаг равным 4 в Keras API. Пытался поискать такой вариант, но не нашел.

Вот что я использовал:

numberOfTimesteps = 240
i = 0
lstmFeatures = pd.DataFrame()
while i < features.transpose().shape[0] - numberOfTimesteps:
    temp = features.transpose().iloc[i:i+numberOfTimesteps,:]
    lstmFeatures = lstmFeatures.append(temp)
    if i%100 == 0:
        print(i,end=',')
    i = i + 1        

Есть ли у кого-нибудь лучшее представление о том, как изменить форму или как использовать Keras?


person JonathanSchmied    schedule 09.06.2019    source источник
comment
stackoverflow.com/a/62570576/10375049   -  person Marco Cerliani    schedule 17.01.2021


Ответы (1)


Вы можете использовать tf.gather

import tensorflow as tf

my_data = tf.constant([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
to_take_inds = tf.range(4)[None, :]
to_take_inds = to_take_inds + tf.range(7)[:, None]

reshaped = tf.gather(my_data, to_take_inds)
with tf.Session() as sess:
    print(sess.run(reshaped))

отпечатки

[[ 1  2  3  4]
 [ 2  3  4  5]
 [ 3  4  5  6]
 [ 4  5  6  7]
 [ 5  6  7  8]
 [ 6  7  8  9]
 [ 7  8  9 10]]
person Ben    schedule 09.06.2019