用于多输入模型的 R Keras predict_prob 不起作用。我可以成功地训练模型,但是在评分时出现错误

Posted

技术标签:

【中文标题】用于多输入模型的 R Keras predict_prob 不起作用。我可以成功地训练模型,但是在评分时出现错误【英文标题】:R Keras predict_prob for multi input model is not working. I can train the model sucessfuly but while scoring I get error 【发布时间】:2018-09-27 21:40:51 【问题描述】:

以列表文本嵌入和结构化特征为输入并生成类概率的多输入模型。我可以成功训练模型,但在 predict_prob 期间出现错误

 categorical_input <- layer_input(shape = c(3116),

                                 dtype = "float32",

                                 name = "categorical_input")

categorical_layer <- categorical_input %>%

  layer_dense(units = 803,

              activation = "relu",

              name = "categorical_layer")


main_input <-

  layer_input(shape = c(26),

              dtype = 'int32',

              name = 'main_input')

text_input <- main_input %>%

  layer_embedding(input_dim = 48297, output_dim = 100) %>%

  layer_gru(units = 100,

            dropout = 0.2,

            recurrent_dropout = 0.2)



main_output <-

  layer_concatenate(c(text_input, categorical_layer)) %>%

  layer_dense(units = 803,

              activation = 'softmax',

              name = 'main_output')



##

model <- keras_model(list(main_input, categorical_input), main_output)

##
optimizer = optimizer_rmsprop(lr=0.001)
model %>% compile(

  loss = "categorical_crossentropy",

  metrics = c(top_5_categorical_accuracy = metric_top_5_categorical_accuracy,

              "accuracy"),

  optimizer = optimizer



)

当我尝试根据输入结构化特征(one_hot_encode_test)和文本(训练令牌)生成预测时

str(one_hot_encode_test)
Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
  ..@ i       : int [1:36] 0 0 0 0 0 0 0 0 0 0 ...
  ..@ p       : int [1:3117] 0 0 0 0 0 0 0 0 0 0 ...
  ..@ Dim     : int [1:2] 1 3116
  ..@ Dimnames:List of 2
  .. ..$ : chr "1"
  .. ..$ : chr [1:3116] "veh_eng_db_cd101-10A" "veh_eng_db_cd101-10B" "veh_eng_db_cd101-10C" "veh_eng_db_cd101-10D" ...
  ..@ x       : num [1:36] 1 1 1 1 1 1 1 1 1 1 ...
  ..@ factors : list()

text :- str(train_tokens)
 num [1, 1:26] 13 28 4 36 0 0 0 0 0 0 ...





input = matrix(unlist(L), ncol = 3142, byrow = TRUE)
input = do.call(rbind,lapply(L,matrix,ncol=3142,byrow=TRUE))
#
predict_vmrs33 = model %>% predict_proba(input, batch_size = 1, verbose = 1)

我得到错误 “py_get_attr_impl(x, name, silent) 中的错误: AttributeError:“模型”对象没有属性“predict_proba”

【问题讨论】:

【参考方案1】:

我所做的唯一改变 - 使用预测函数而不是 predict_prob,而不是在两个输入上创建矩阵,我创建了一个列表(train_tokens,one_hot_encode_test)

predict = model %>% predict(list(train_tokens,one_hot_encode_test), batch_size = 1, verbose = 1)

这个链接帮助我找到了这个解决方案https://keras.rstudio.com/articles/examples/quora_siamese_lstm.html

【讨论】:

以上是关于用于多输入模型的 R Keras predict_prob 不起作用。我可以成功地训练模型,但是在评分时出现错误的主要内容,如果未能解决你的问题,请参考以下文章

Keras model.predict() 为测试输入中的所有值返回相同的预测输出

使用 R 在 keras 中为多类分类创建混淆矩阵

Tensorflow Keras 多输入模型

Keras 多输入、多输出、多loss模型构建

Keras模型的predict和predict_on_batch方法有什么区别?

在 Keras 中使用 `predict` 以与给定相同的顺序预测一维数组