用于多输入模型的 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() 为测试输入中的所有值返回相同的预测输出