首页 > 解决方案 > Keras R:在卷积和池化层之后将输入添加到卷积神经网络

问题描述

我在这个答案中使用了该方法: 在卷积和池化层之后向卷积神经网络添加输入 我在 R 中使用 Keras 并在拟合模型时出错:

Error in py_call_impl(callable, dots$args, dots$keywords) : 
  ValueError: in user code:

    C:\Users\R-MINI~1\envs\R-RETI~1\lib\site-packages\keras\engine\training.py:853 train_function  
        return step_function(self, iterator)

有人能告诉我我的代码出了什么问题吗?

library(keras)
numvar1 <- 100
numvar2 <- 30
numnode_conv <- 100

conv_model <- keras_model_sequential()
conv_model %>% 
  layer_conv_1d(filters = 32, kernel_size = 3, activation = 'relu',
                input_shape = c(numvar1, 1)) %>% 
  layer_conv_1d(filters = 32, kernel_size = 3, activation = 'relu') %>% 
  layer_average_pooling_1d(pool_size = 3)%>% 
  layer_flatten() %>% 
  layer_dense(units = numnode_conv, activation = "relu")

fc_model <- keras_model_sequential()
fc_model %>% 
  layer_dense(units = numnode_conv+numvar2, activation = "relu", input_shape = numnode_conv+numvar2) %>% 
  layer_dense(units = numnode_conv+numvar2, activation = "relu") %>% 
  layer_dense(units = 1) 


input1 <- layer_input(c(numvar1))
input2 <- layer_input(c(numvar2))

output1 <- input1 %>% conv_model
inputconv <- layer_concatenate(list(output1, input2))
output <- inputconv%>%fc_model
model <-  keras_model( list(input1 , input2) , output )

early_stop <- callback_early_stopping(monitor = "val_loss", 
                                      min_delta = 0.1, 
                                      patience = 2,
                                      restore_best_weights = TRUE,
                                      verbose = 0)


losses <- c(keras::loss_mean_absolute_percentage_error,  
            keras::loss_mean_absolute_error,
            keras::loss_mean_squared_error,
            keras::loss_mean_squared_logarithmic_error)
model %>% compile(
  optimizer = "rmsprop",
  loss = losses[3],
  metrics = c("mse")
)

trainx1 <- matrix( rnorm(100*numvar1,mean=0,sd=1), 100, numvar1) 
trainx2 <- matrix( rnorm(100*numvar2,mean=0,sd=1), 100, numvar2) 
trainy <- rnorm(100,mean=0,sd=1)

model %>% fit(
  list(trainx1,trainx2),
  trainy,
  epochs = 500,
  batch_size = 128,
  verbose = 1,
  validation_split = 0.2,
  callbacks = list(
    early_stop)
)

标签: rkerasneural-networkconv-neural-network

解决方案


推荐阅读