R语言Keras多输入模型predict_prob调用失败求助
嘿,我碰到过不少多输入Keras模型预测踩坑的情况,结合你给出的代码片段,咱们来排查下predict_prob报错的常见原因和解决办法:
1. 输入数据的结构不匹配模型定义
多输入模型的预测需要严格对应每个输入的名称和维度,不能像单输入模型那样直接传一个数据框。你定义了两个输入:categorical_input(维度3116)和main_input(维度26),调用predict_prob时必须传入一个命名列表,每个键对应输入层的名字,值对应对应维度的数据:
# 示例:假设你的两类输入数据分别是cat_data和main_data prob_predictions <- your_model %>% predict_prob(list( categorical_input = cat_data, main_input = main_data ))
很多人会不小心把两类数据合并成一个数据框传入,这会让模型找不到对应输入,直接报错。
2. 预测数据的类型和输入层定义不匹配
看你的代码,categorical_input指定了dtype = "float32",main_input是dtype = 'int32'。如果预测时传入的数据类型不匹配(比如main_input的预测数据变成了浮点型),就会触发类型错误。可以用typeof()检查数据类型,必要时转换:
# 确保main_input的数据是int32类型 main_data <- as.integer(main_data) # 确保categorical_input是浮点型 cat_data <- as.numeric(cat_data)
3. 输出层的设置不符合概率输出要求
既然是生成类别概率,你的输出层应该是用softmax激活函数的全连接层,比如:
output_layer <- concatenate(list(categorical_layer, main_processed_layer)) %>% layer_dense(units = 你的类别总数, activation = "softmax")
如果输出层用了其他激活函数(比如sigmoid但类别数大于2),或者units设置不对,predict_prob就无法正确解析概率输出,要么报错要么结果异常。
4. 模型保存/加载后的输入名称不一致
如果是训练完保存模型,再加载后预测,有时候多输入模型的输入名称会出现偏差。可以先查看当前模型的输入名称:
print(your_model$input_names)
确保你传入预测列表的键和输出的名称完全一致(大小写、拼写都不能错)。
内容的提问来源于stack exchange,提问作者VORA
相关产品推荐
相关产品推荐

