要积累LSTM神经网络的训练,我要积累:
在整形具有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
)
能否举个例子,说明如何对这些数据进行整形以进行批处理训练,以便按照数据集的顺序处理每个序列的时间步?