R Keras错误:py_call_impl(可调用,dots $ args,dots $ keywords)错误:ValueError:未提供数据

时间:2020-07-25 00:39:50

标签: r tensorflow keras

运行R V4

当尝试运行具有预训练词嵌入的模型时,出现错误:py_call_impl(callable,dots $ args,dots $ keywords)错误: ValueError:没有为“ dense_16”提供数据。需要每个键中的数据:['dense_16']

我已经看到了几个与此问题有关的问题,而且似乎处理的数据类型错误,因此TensorFlow无法将其强制为正确的格式。话虽如此,正如在最后一部分代码中所看到的那样,我已将我的代码以向量形式强行插入矩阵,这似乎是建议,但仍然会出现错误。

创建单词嵌入的代码直接来自Chollet和Allaire的R深度学习的第6章,因此我对此很有信心。唯一的变化是我的数据。数据是作业/考试的文字,学生根据数据进行评分。您会注意到,exam.scores和class.scores包括27个学生(行),但是只有1行被输入到NN中。

setwd("C:/Users/tanne/Desktop/RData/Glove")
lines<-readLines("C:/Users/tanne/Desktop/RData/Glove/glove.6B.100d.txt")
embeddings_index<-new.env(hash = TRUE,parent = emptyenv())
gc()
for(i in 1:length(lines)){
  line<-lines[[i]]
  values <- strsplit(line," ")[[1]]
  word <- values[[1]]
  embeddings_index[[word]]<-as.double(values[-1])
  
  }

#dim from Glove file
embedding_dim <- 100

embedding_matrix <- array(0, c(max_words, embedding_dim))
gc()
for (word in names(word_index)) {
  index <- word_index[[word]]
  if (index < max_words) {
    embedding_vector <- embeddings_index[[word]]
    if (!is.null(embedding_vector))
      # Words not found in the embedding index will be all zeros.
      embedding_matrix[index+1,] <- embedding_vector
  }
}


model <- keras_model_sequential() %>% 
  layer_embedding(input_dim = max_words, output_dim = embedding_dim, 
                  input_length = maxlen) %>% 
  layer_flatten() %>% 
  layer_dense(units = 32, activation = "relu") #%>% 
  layer_dense(units = 1, activation = "sigmoid")

summary(model)

get_layer(model, index = 1) %>% 
  set_weights(list(embedding_matrix)) %>% 
  freeze_weights()

model %>% compile(
  optimizer="rmsprop",
  loss="binary_crossentropy",
  metrics=c("acc")
)

history<-model %>% fit(
  as.matrix(class.text),c(class.scores[1,]),
  epochs=20,
  batch_size=32,
  validation_data=list(as.matrix(exam.text),c(exam.scores[1,]))
)

错误:

  File "C:\Users\tanne\Anaconda3\envs\r-tensorflow\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1278, in fit
    validation_split=validation_split)
  File "C:\Users\tanne\Anaconda3\envs\r-tensorflow\lib\site-packages\tensorflow\python\keras\engine\training.py", line 917, in _standardize_user_data
    exception_prefix='target')
  File "C:\Users\tanne\Anaconda3\envs\r-tensorflow\lib\site-packages\tensorflow\python\keras\engine\training_utils.py", line 130, in standardize_input_data
    'for each key in: ' + str(names))```


显示数据状态:

> dim(exam.scores)
[1] 27 32
> dim(class.scores)
[1]   27 1492
> dim(exam.text)
[1]  32 500
> dim(exam.scores)
[1] 27 32
> class(exam.scores)
[1] "data.frame"
> class(class.scores)
[1] "data.frame"
> class(exam.text)
[1] "matrix" "array" 
> class(class.text)
[1] "matrix" "array"

感谢您提出的任何建议或更多调试提示。

0 个答案:

没有答案