Keras: Como devo me preparar dados de entrada para RNN?

votos
9

Estou tendo problemas com a preparação de dados de entrada para RNN em Keras.

Atualmente, minha dimensão dos dados de treinamento é: (6752, 600, 13)

  • 6752: número de dados de treinamento
  • 600: número de passos de tempo
  • 13: tamanho de vectores característicos, (o vector é em flutuador)

X_traine Y_trainsão ambos nesta dimensão.

Quero preparar esses dados para ser alimentado SimpleRNNem Keras. Suponha que estamos passando por etapas de tempo, a partir da etapa # 0 para a etapa # 599. Vamos dizer que eu quero usarinput_length = 5 , o que significa que eu quero usar últimos 5 entradas. (por exemplo, o passo # 10, # 11, # 12, # 13, # 14 @ # passo 14).

Como devo remodelar X_train?

deveria ser (6752, 5, 600, 13)ou deveria ser (6752, 600, 5, 13)?

E que forma deve Y_trainestar em?

Caso seja (6752, 600, 13)ou (6752, 1, 600, 13)ou (6752, 600, 1, 13)?

Publicado 02/05/2016 em 21:51
fonte usuário
Em outras línguas...                            


1 respostas

votos
12

Se você só quer prever a saída usando as mais recentes 5 entradas, não há necessidade de sempre fornecer o total de 600 passos de tempo de qualquer amostra de treinamento. Minha sugestão seria a de passar os dados de treinamento da seguinte maneira:

             t=0  t=1  t=2  t=3  t=4  t=5  ...  t=598  t=599
sample0      |---------------------|
sample0           |---------------------|
sample0                |-----------------
...
sample0                                         ----|
sample0                                         ----------|
sample1      |---------------------|
sample1           |---------------------|
sample1                |-----------------
....
....
sample6751                                      ----|
sample6751                                      ----------|

O número total de seqüências de treinamento irá resumir a

(600 - 4) * 6752 = 4024192    # (nb_timesteps - discarded_tailing_timesteps) * nb_samples

Cada seqüência de treinamento consiste em 5 passos de tempo. Em cada passo de tempo de cada seqüência de passar todos os 13 elementos do vetor recurso. Subsequentemente, a forma dos dados de formação será (4024192, 5, 13).

Este ciclo pode remodelar seus dados:

input = np.random.rand(6752,600,13)
nb_timesteps = 5

flag = 0

for sample in range(input.shape[0]):
    tmp = np.array([input[sample,i:i+nb_timesteps,:] for i in range(input.shape[1] - nb_timesteps + 1)])

    if flag==0:
        new_input = tmp
        flag = 1

    else:
        new_input = np.concatenate((new_input,tmp))
Respondeu 03/05/2016 em 15:38
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more