如何确定输入是否可以在有状态LSTM中按批处理大小划分?

时间:2018-07-03 12:14:19

标签: r tensorflow neural-network keras lstm

使用状态LSTM训练网络时遇到一些问题。 给定下面的代码,我收到以下错误消息:

 Error in py_call_impl(callable, dots$args, dots$keywords) : 
  ValueError: In a stateful network, you should only pass inputs with a number of samples that can be divided by the batch size. Found: 9384 samples 

输入是从外部应用程序发送的,因此我无法控制发送的确切输入数量。确保输入始终可以按批次大小进行划分的最佳方法是什么?

neural.train = function(model,XY) 
{
  XY <- as.matrix(XY)
  X <- XY[,-ncol(XY)]
  Y <- XY[,ncol(XY)]
  Y <<- ifelse(Y > 0,1,0)

  dropout <- 0.3
  batchSize <- 64

  newModel <- keras_model_sequential() 

  newModel %>%
    layer_lstm(batch_input_shape =  c(batchSize, 30, 19), units = 72, return_sequences = TRUE, stateful = TRUE, dropout = dropout, recurrent_dropout = dropout) %>%
    #layer_dense(units = 20) %>%
    #layer_lstm(units = 50, return_sequences = TRUE, stateful = TRUE, dropout = dropout, recurrent_dropout = dropout) %>% 
    layer_lstm(units = 16, dropout = dropout, recurrent_dropout = dropout, return_sequences = FALSE, stateful = TRUE) %>% 
    layer_dense(units = 8) %>% 
    layer_batch_normalization() %>% 
    layer_dense(units = 1, activation = 'relu')

  newModel %>% compile( 
    optimizer = optimizer_rmsprop(lr = 0.001),
    loss = 'binary_crossentropy',
    metrics = c('accuracy')
  )

  #X_conv <- matrix(c(X[1,1:10],X[1,11:20]),ncol=10,nrow=2)
  ar <- array(X,c(dim(X)[1],30,19))
  #newModel %>% fit(X, Y, epochs=20, batch_size=100, validation_split = 0.2, shuffle=TRUE, callbacks=reduce_lr)
  newModel %>% fit(ar, Y, epochs=100, batch_size=batchSize, validation_split = 0.2, shuffle=FALSE)
  Models[[model]] <<-  serialize_model(newModel, include_optimizer = TRUE)
}

0 个答案:

没有答案