R Keras:在多维时间序列LSTM训练的情况下,批量大小> 1的整形数据

时间:2018-08-06 17:08:40

标签: r keras batch-processing lstm

要积累LSTM神经网络的训练,我要积累:

  • 要素数量等于50的多维时间序列
  • 每个训练示例中的时间序列长度为32
  • 在每个示例中,我应该回归标量值
  • 每批有8个示例和目标(序列)。

在整形具有50列(特征)和256行(序列长度的8倍)的数据矩阵时,我遇到了问题。

由于我使用R API,所以找不到足够的示例来弄清楚该怎么做。

初始化NN:

nn_model_1 <- 
     keras_model_sequential() %>%
     layer_lstm(
          units = hidden_u_1
          , activation = activ_hidden_1
          , stateful = F
          , return_sequences = T
          , input_shape = c(sequence_length, input_number + history_seq_number + 2)
     ) %>%
     layer_lstm(
          units = hidden_u_1 / 2
          , activation = activ_hidden_1
          , stateful = F
          , return_sequences = F
     ) %>%
     layer_dense(
          units = hidden_u_2
          ) %>%
     layer_activation(
          activ_hidden_2
          ) %>%
     layer_dense(
          units = hidden_u_3
     ) %>%
     layer_activation(
          activ_hidden_3
     ) %>%
     compile(
          loss = 'mse'
          , optimizer = 'adam'
          , metrics = 'mse'
     )

训练神经网络

当我分析来自train.x的哪些行用作批处理中序列的时间步时,很明显,此体系结构不会保留原始数据顺序,因此使培训毫无意义。

例如,序列的第二个时间步是从第9行(8 + 1)绘制的,但它应该是第2行,依此类推。

由于我不知道如何解决此问题,因此我必须在每个时期只进行一个序列的在线培训。

train.x <- array(as.matrix(batch[, c(
                                  input_names
                                  , 'float'
                                  , paste0('state_', seq(1, history_seq_number, 1))
                                  , 'action'
                             ), with = F]), dim = c(buffer_batch, sequence_length, input_number + history_seq_number + 2))

                             train.y <- array(targets[i], dim = c(buffer_batch, 1))


                             ## update weights in neural net

                             train_nn <- fit(
                                  primary_nn
                                  , train.x
                                  , train.y
                                  , epochs = 1
                                  , batch_size = buffer_batch
                                  , shuffle = F
                                  , verbose = 0
                             )

能否举个例子,说明如何对这些数据进行整形以进行批处理训练,以便按照数据集的顺序处理每个序列的时间步?

0 个答案:

没有答案